hch
3 天以前 ddbeb0b7f3277eb6198e1a2e7cb93aab6f5a2d20
351 【内政】红颜系统
4个文件已添加
4个文件已修改
347 ■■■■■ 已修改文件
Main/Config/ConfigManager.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/BeautySkinConfig.cs 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMManager.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMShowWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMSkinCell.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMSkinCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMSkinWin.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMSkinWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 字典
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)
        {
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)
    {
Main/System/BeautyMM/BeautyMMShowWin.cs
@@ -87,7 +87,7 @@
        skinBtn.AddListener(() =>
        {
            // UIManager.Instance.OpenWindow<BeautyMMListWin>();
            UIManager.Instance.OpenWindow<BeautyMMSkinWin>(mmID);
        });
        seeAttrBtn.AddListener(() =>
Main/System/BeautyMM/BeautyMMSkinCell.cs
New file
@@ -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;
        });
        // 服务端没有默认解锁,获得解锁的默认 帮手动解锁发送
        // if (mmData != null && mmData.State != 0 && skinData.State == 0 && skinConfig.UnlockWay == 1)
        // {
        //     BeautyMMManager.Instance.SendSkinOP(mmID, BeautyMMManager.Instance.selectSkinID, 1);
        // }
    }
}
Main/System/BeautyMM/BeautyMMSkinCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dd24658dabbf575428047614fe16ca9d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/BeautyMM/BeautyMMSkinWin.cs
New file
@@ -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;  //解锁或者加成效果
    [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);
    }
}
Main/System/BeautyMM/BeautyMMSkinWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: df1fcdd540c50e8478e77bb8f88ce8fb
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: