From ddbeb0b7f3277eb6198e1a2e7cb93aab6f5a2d20 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 04 二月 2026 00:10:35 +0800
Subject: [PATCH] 351 【内政】红颜系统
---
Main/Config/Configs/BeautySkinConfig.cs | 41 +++---
Main/System/BeautyMM/BeautyMMSkinCell.cs | 60 ++++++++++
Main/System/BeautyMM/BeautyMMSkinWin.cs.meta | 11 +
Main/System/BeautyMM/BeautyMMSkinWin.cs | 188 +++++++++++++++++++++++++++++++
Main/Config/ConfigManager.cs | 3
Main/System/BeautyMM/BeautyMMSkinCell.cs.meta | 11 +
Main/System/BeautyMM/BeautyMMManager.cs | 31 +++++
Main/System/BeautyMM/BeautyMMShowWin.cs | 2
8 files changed, 326 insertions(+), 21 deletions(-)
diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 1cf8a3a..dfac8d5 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -91,6 +91,7 @@
typeof(PlayerAttrConfig),
typeof(PlayerFaceConfig),
typeof(PresetUnlockConfig),
+ typeof(PriorBundleConfig),
typeof(RandomNameConfig),
typeof(SignInConfig),
typeof(StoreConfig),
@@ -361,6 +362,8 @@
ClearConfigDictionary<PlayerFaceConfig>();
// 娓呯┖ PresetUnlockConfig 瀛楀吀
ClearConfigDictionary<PresetUnlockConfig>();
+ // 娓呯┖ PriorBundleConfig 瀛楀吀
+ ClearConfigDictionary<PriorBundleConfig>();
// 娓呯┖ RandomNameConfig 瀛楀吀
ClearConfigDictionary<RandomNameConfig>();
// 娓呯┖ SignInConfig 瀛楀吀
diff --git a/Main/Config/Configs/BeautySkinConfig.cs b/Main/Config/Configs/BeautySkinConfig.cs
index 3407cc1..852b494 100644
--- a/Main/Config/Configs/BeautySkinConfig.cs
+++ b/Main/Config/Configs/BeautySkinConfig.cs
@@ -1,6 +1,6 @@
锘�//--------------------------------------------------------
// [Author]: YYL
-// [ Date ]: 2025骞�12鏈�21鏃�
+// [ Date ]: 2026骞�2鏈�3鏃�
//--------------------------------------------------------
using System.Collections.Generic;
@@ -17,6 +17,7 @@
}
public int SkinID;
+ public string Name;
public int BeautyID;
public int UnlockWay;
public int UnlockValue;
@@ -42,25 +43,27 @@
string[] tables = input.Split('\t');
int.TryParse(tables[0],out SkinID);
- int.TryParse(tables[1],out BeautyID);
+ Name = tables[1];
- int.TryParse(tables[2],out UnlockWay);
+ int.TryParse(tables[2],out BeautyID);
- int.TryParse(tables[3],out UnlockValue);
+ int.TryParse(tables[3],out UnlockWay);
- int.TryParse(tables[4],out UnlockNeedCnt);
+ int.TryParse(tables[4],out UnlockValue);
- int.TryParse(tables[5],out UpNeedCnt);
+ int.TryParse(tables[5],out UnlockNeedCnt);
- int.TryParse(tables[6],out StarMax);
+ int.TryParse(tables[6],out UpNeedCnt);
- if (tables[7].Contains("["))
+ int.TryParse(tables[7],out StarMax);
+
+ if (tables[8].Contains("["))
{
- AttrIDList = JsonMapper.ToObject<int[]>(tables[7]);
+ AttrIDList = JsonMapper.ToObject<int[]>(tables[8]);
}
else
{
- string[] AttrIDListStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+ string[] AttrIDListStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
AttrIDList = new int[AttrIDListStringArray.Length];
for (int i=0;i<AttrIDListStringArray.Length;i++)
{
@@ -68,13 +71,13 @@
}
}
- if (tables[8].Contains("["))
+ if (tables[9].Contains("["))
{
- InitAttrValueList = JsonMapper.ToObject<int[]>(tables[8]);
+ InitAttrValueList = JsonMapper.ToObject<int[]>(tables[9]);
}
else
{
- string[] InitAttrValueListStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+ string[] InitAttrValueListStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
InitAttrValueList = new int[InitAttrValueListStringArray.Length];
for (int i=0;i<InitAttrValueListStringArray.Length;i++)
{
@@ -82,13 +85,13 @@
}
}
- if (tables[9].Contains("["))
+ if (tables[10].Contains("["))
{
- AttrPerStarAddList = JsonMapper.ToObject<int[]>(tables[9]);
+ AttrPerStarAddList = JsonMapper.ToObject<int[]>(tables[10]);
}
else
{
- string[] AttrPerStarAddListStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+ string[] AttrPerStarAddListStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
AttrPerStarAddList = new int[AttrPerStarAddListStringArray.Length];
for (int i=0;i<AttrPerStarAddListStringArray.Length;i++)
{
@@ -96,11 +99,11 @@
}
}
- HeadIcon = tables[10];
+ HeadIcon = tables[11];
- SmallRole = tables[11];
+ SmallRole = tables[12];
- BigRole = tables[12];
+ BigRole = tables[13];
}
catch (Exception exception)
{
diff --git a/Main/System/BeautyMM/BeautyMMManager.cs b/Main/System/BeautyMM/BeautyMMManager.cs
index d7d26c6..98825e8 100644
--- a/Main/System/BeautyMM/BeautyMMManager.cs
+++ b/Main/System/BeautyMM/BeautyMMManager.cs
@@ -16,6 +16,17 @@
public int selectLoveItemID = 0;
+ int m_SelectSkinID;
+ public event Action OnSelectSkinIDChange;
+ public int selectSkinID
+ {
+ get { return m_SelectSkinID; }
+ set
+ {
+ m_SelectSkinID = value;
+ OnSelectSkinIDChange?.Invoke();
+ }
+ }
//閰嶇疆
//閬撳叿ID 瀵瑰簲 濂芥劅搴�
@@ -501,6 +512,17 @@
}
+ //鎿嶄綔 1-婵�娲伙紱2-浣╂埓锛�3-鍗囨槦
+ public void SendSkinOP(int mmID, int skinID, int opType)
+ {
+ var pack = new CB221_tagCSBeautySkinOP();
+ pack.BeautyID = (ushort)mmID;
+ pack.SkinID = (ushort)skinID;
+ pack.OPType = (byte)opType;
+ GameNetSystem.Instance.SendInfo(pack);
+ }
+
+
#region 绾㈢偣
Redpoint redpoint = new Redpoint(MainRedDot.MainAffairsRedpoint, MainRedDot.Redpoint_BeautyMM);
Redpoint redpointMM = new Redpoint(MainRedDot.Redpoint_BeautyMM, MainRedDot.Redpoint_BeautyMM * 10 + 1);
@@ -654,7 +676,14 @@
return 0;
}
-
+ public BeautyMMSkinData GetSkinData(int skinID)
+ {
+ if (beautyMMSkinDataDict.ContainsKey(skinID))
+ {
+ return beautyMMSkinDataDict[skinID];
+ }
+ return new BeautyMMSkinData();
+ }
public bool IsMMSkinRed(int mmID)
{
diff --git a/Main/System/BeautyMM/BeautyMMShowWin.cs b/Main/System/BeautyMM/BeautyMMShowWin.cs
index 0f5802e..2984751 100644
--- a/Main/System/BeautyMM/BeautyMMShowWin.cs
+++ b/Main/System/BeautyMM/BeautyMMShowWin.cs
@@ -87,7 +87,7 @@
skinBtn.AddListener(() =>
{
- // UIManager.Instance.OpenWindow<BeautyMMListWin>();
+ UIManager.Instance.OpenWindow<BeautyMMSkinWin>(mmID);
});
seeAttrBtn.AddListener(() =>
diff --git a/Main/System/BeautyMM/BeautyMMSkinCell.cs b/Main/System/BeautyMM/BeautyMMSkinCell.cs
new file mode 100644
index 0000000..0311c1e
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinCell.cs
@@ -0,0 +1,60 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BeautyMMSkinCell : CellView
+{
+ [SerializeField] Image headBG;
+ [SerializeField] Image headImg;
+ [SerializeField] Transform lockObj;
+ [SerializeField] Image unLockImg;
+ [SerializeField] Image selectImg;
+ [SerializeField] Text usedText;
+ [SerializeField] Image redImg;
+ [SerializeField] Button btn;
+
+
+
+ public void Display(int mmID, int skinID)
+ {
+ var mmConfig = BeautyConfig.Get(mmID);
+ var skinConfig = BeautySkinConfig.Get(skinID);
+ headBG.SetSprite("heroheadBG" + mmConfig.BeautyQuality);
+ headImg.SetOrgSprite(skinConfig.HeadIcon, "BeautyMMHead");
+
+ var redState = BeautyMMManager.Instance.GetMMSkinStateBySkinID(skinConfig);
+ var skinData = BeautyMMManager.Instance.GetSkinData(skinID);
+ var mmData = BeautyMMManager.Instance.GetBeautyMMData(mmID);
+ var state = skinData.State;
+ if (mmData != null && mmData.State != 0 && skinConfig.UnlockWay == 1)
+ {
+ state = 1;
+ }
+ if (state != 0)
+ {
+ lockObj.SetActive(false);
+ }
+ else
+ {
+ lockObj.SetActive(true);
+ unLockImg.SetActive(redState > 0);
+ }
+ usedText.SetActive(skinData.Used == 1);
+ selectImg.SetActive(BeautyMMManager.Instance.selectSkinID == skinID);
+ redImg.SetActive(redState > 0);
+
+ btn.AddListener(() =>
+ {
+ BeautyMMManager.Instance.selectSkinID = skinID;
+ });
+
+
+ // 鏈嶅姟绔病鏈夐粯璁よВ閿侊紝鑾峰緱瑙i攣鐨勯粯璁� 甯墜鍔ㄨВ閿佸彂閫�
+ // if (mmData != null && mmData.State != 0 && skinData.State == 0 && skinConfig.UnlockWay == 1)
+ // {
+ // BeautyMMManager.Instance.SendSkinOP(mmID, BeautyMMManager.Instance.selectSkinID, 1);
+ // }
+ }
+
+
+}
diff --git a/Main/System/BeautyMM/BeautyMMSkinCell.cs.meta b/Main/System/BeautyMM/BeautyMMSkinCell.cs.meta
new file mode 100644
index 0000000..540365f
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dd24658dabbf575428047614fe16ca9d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/BeautyMM/BeautyMMSkinWin.cs b/Main/System/BeautyMM/BeautyMMSkinWin.cs
new file mode 100644
index 0000000..16a3e97
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinWin.cs
@@ -0,0 +1,188 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BeautyMMSkinWin : UIBase
+{
+ [SerializeField] ImageEx roleImg;
+ [SerializeField] Text nameText;
+ [SerializeField] Text wayText;
+ [SerializeField] Text attrTipText; //瑙i攣鎴栬�呭姞鎴愭晥鏋�
+ [SerializeField] Text attrValueText;
+ [SerializeField] ScrollerController clothesScroller;
+ [SerializeField] Button unlockBtn;
+ [SerializeField] Text cntText;
+ [SerializeField] Image itemIcon;
+ [SerializeField] Transform opObjs;
+ [SerializeField] Button lvUPBtn;
+ [SerializeField] Text lvUPCntText;
+ [SerializeField] Image lvUPItemIcon;
+ [SerializeField] Button putOnBtn;
+ [SerializeField] Image putOnYetImg;
+ [SerializeField] UIEffectPlayer lvUPEffect;
+
+
+ int mmID;
+
+
+ protected override void InitComponent()
+ {
+ unlockBtn.AddListener(UnLockSkin);
+ lvUPBtn.AddListener(LvUpSkin);
+ putOnBtn.AddListener(PutOnSkin);
+
+ }
+
+
+ protected override void OnPreOpen()
+ {
+ mmID = functionOrder;
+ BeautyMMManager.Instance.selectSkinID = BeautyMMManager.Instance.GetUsedSkinID(mmID);
+ clothesScroller.OnRefreshCell += OnRefreshCell;
+ BeautyMMManager.Instance.OnSelectSkinIDChange += Display;
+ CreateScroller();
+ Display();
+ }
+
+ protected override void OnPreClose()
+ {
+ clothesScroller.OnRefreshCell -= OnRefreshCell;
+ BeautyMMManager.Instance.OnSelectSkinIDChange -= Display;
+ }
+
+
+ void Display()
+ {
+ var skinConfig = BeautySkinConfig.Get(BeautyMMManager.Instance.selectSkinID);
+ roleImg.SetOrgSprite(skinConfig.BigRole, "BeautyMMBigRole");
+ roleImg.SetNativeSize();
+ var skinData = BeautyMMManager.Instance.GetSkinData(BeautyMMManager.Instance.selectSkinID);
+ if (skinData.Star != 0)
+ {
+ nameText.text = skinConfig.Name + " " + Language.Get("L1113", skinData.Star);
+ }
+ else
+ {
+ nameText.text = skinConfig.Name;
+ }
+
+ var config = BeautyConfig.Get(mmID);
+ if (skinConfig.UnlockWay == 1)
+ {
+ wayText.text = Language.Get("BeautyMMSkin1", config.Name);
+ }
+ else if (skinConfig.UnlockWay == 2)
+ {
+ var itemConfig = ItemConfig.Get(skinConfig.UnlockValue);
+ if (itemConfig.GetWay.IsNullOrEmpty())
+ {
+ wayText.text = "";
+ }
+ else
+ {
+ wayText.text = GetItemWaysConfig.Get(itemConfig.GetWay[0]).Name;
+ }
+ }
+
+ if (skinConfig.InitAttrValueList.IsNullOrEmpty())
+ {
+ attrTipText.text = "";
+ attrValueText.text = "";
+ }
+ else
+ {
+ if (skinData.State == 0)
+ {
+ attrTipText.text = Language.Get("PhantasmPavilion11");
+ attrValueText.text = UIHelper.AppendColor(TextColType.lightYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], skinConfig.InitAttrValueList[0]));
+ }
+ else
+ {
+ attrTipText.text = Language.Get("PhantasmPavilion07");
+ var value = skinConfig.InitAttrValueList[0] + skinData.Star * skinConfig.AttrPerStarAddList[0];
+
+ attrValueText.text = UIHelper.AppendColor(TextColType.lightYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], value)) +
+ Language.Get("PhantasmPavilion12", UIHelper.AppendColor(TextColType.Green, "+" + PlayerPropertyConfig.GetValueDescription(skinConfig.AttrIDList[0], skinConfig.AttrPerStarAddList[0])));
+ }
+ }
+
+
+
+ if (skinData.State == 0)
+ {
+ if (skinConfig.UnlockWay == 2)
+ {
+ unlockBtn.SetActive(true);
+ cntText.text = UIHelper.ShowUseItem(PackType.Item, skinConfig.UnlockValue, skinConfig.UnlockNeedCnt);
+ itemIcon.SetItemSprite(skinConfig.UnlockValue);
+ }
+ else
+ {
+ unlockBtn.SetActive(false);
+ }
+ opObjs.SetActive(false);
+ }
+ else
+ {
+ unlockBtn.SetActive(false);
+ opObjs.SetActive(true);
+ if (skinConfig.StarMax != 0 && skinData.Star < skinConfig.StarMax)
+ {
+ lvUPBtn.SetActive(true);
+ lvUPCntText.text = UIHelper.ShowUseItem(PackType.Item, skinConfig.UnlockValue, skinConfig.UpNeedCnt);
+ lvUPItemIcon.SetItemSprite(skinConfig.UnlockValue);
+ }
+ else
+ {
+ lvUPBtn.SetActive(false);
+ }
+
+ putOnBtn.SetActive(skinData.Used == 0);
+ putOnYetImg.SetActive(skinData.Used == 1);
+
+ }
+ }
+
+
+ void CreateScroller()
+ {
+ clothesScroller.Refresh();
+ var _list = BeautySkinConfig.GetSkinListByMMID(mmID);
+ for (int i = 0; i < _list.Count; i++)
+ {
+ clothesScroller.AddCell(ScrollerDataType.Header, _list[i].SkinID);
+ }
+ clothesScroller.Restart();
+
+ }
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell as BeautyMMSkinCell;
+ _cell.Display(mmID, cell.index);
+ }
+
+ void UnLockSkin()
+ {
+ var skinConfig = BeautySkinConfig.Get(BeautyMMManager.Instance.selectSkinID);
+ if (!ItemLogicUtility.CheckItemCount(PackType.Item, skinConfig.UnlockValue, skinConfig.UnlockNeedCnt, 2))
+ {
+ return;
+ }
+ BeautyMMManager.Instance.SendSkinOP(mmID, BeautyMMManager.Instance.selectSkinID, 1);
+ }
+
+ void LvUpSkin()
+ {
+ var skinConfig = BeautySkinConfig.Get(BeautyMMManager.Instance.selectSkinID);
+ if (!ItemLogicUtility.CheckItemCount(PackType.Item, skinConfig.UnlockValue, skinConfig.UpNeedCnt, 2))
+ {
+ return;
+ }
+ BeautyMMManager.Instance.SendSkinOP(mmID, BeautyMMManager.Instance.selectSkinID, 3);
+ }
+
+ void PutOnSkin()
+ {
+ BeautyMMManager.Instance.SendSkinOP(mmID, BeautyMMManager.Instance.selectSkinID, 2);
+ }
+}
diff --git a/Main/System/BeautyMM/BeautyMMSkinWin.cs.meta b/Main/System/BeautyMM/BeautyMMSkinWin.cs.meta
new file mode 100644
index 0000000..d0786e3
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: df1fcdd540c50e8478e77bb8f88ce8fb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
--
Gitblit v1.8.0