少年修仙传客户端代码仓库
9895 子 【BT0.1】【主干】坐骑、灵宠、称号升星 / 【BT0.1】坐骑、灵宠、称号升星
7个文件已修改
6个文件已添加
760 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/TitleStarUpConfig.cs 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/TitleStarUpConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/TitleStarUpConfig.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/TitleStarUpConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3CE_tagMCTitleStarInfo.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountSkinWin.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/SelectThemount.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RoleTitle.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RoleTitleCell.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/TitleModel.cs 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/TitleStarUpWin.cs 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/TitleStarUpWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/TitleStarUpConfig.cs
New file
@@ -0,0 +1,239 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           2023年10月25日
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
using LitJson;
public partial class TitleStarUpConfig
{
    public readonly int id;
    public readonly int TitleID;
    public readonly int TitleStar;
    public readonly int[][] StarUpNeedItemList;
    public readonly int[] StarAttrType;
    public readonly int[] StarAttrValue;
    public TitleStarUpConfig()
    {
    }
    public TitleStarUpConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out id);
            int.TryParse(tables[1],out TitleID);
            int.TryParse(tables[2],out TitleStar);
            StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3]);
            if (tables[4].Contains("["))
            {
                StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
            }
            else
            {
                string[] StarAttrTypeStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                StarAttrType = new int[StarAttrTypeStringArray.Length];
                for (int i=0;i<StarAttrTypeStringArray.Length;i++)
                {
                     int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
                }
            }
            if (tables[5].Contains("["))
            {
                StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
            }
            else
            {
                string[] StarAttrValueStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                StarAttrValue = new int[StarAttrValueStringArray.Length];
                for (int i=0;i<StarAttrValueStringArray.Length;i++)
                {
                     int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
                }
            }
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, TitleStarUpConfig> configs = new Dictionary<string, TitleStarUpConfig>();
    public static TitleStarUpConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("TitleStarUpConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        TitleStarUpConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new TitleStarUpConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static TitleStarUpConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<TitleStarUpConfig> GetValues()
    {
        var values = new List<TitleStarUpConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        for (int i = 0; i < keys.Count; i++)
        {
            values.Add(Get(keys[i]));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/TitleStarUp.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/TitleStarUp.txt");
        }
        configs.Clear();
        var tempConfig = new TitleStarUpConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new TitleStarUpConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new TitleStarUpConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/TitleStarUpConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 97c1445f56295bc449466fdc21c95e41
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/TelPartialConfig/TitleStarUpConfig.cs
New file
@@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class TitleStarUpConfig : IConfigPostProcess
{
    public static Dictionary<int, List<int>> titleIDToIDs = new Dictionary<int, List<int>>(); //坐骑幻化升星
    public void OnConfigParseCompleted()
    {
        if (!titleIDToIDs.ContainsKey(TitleID))
        {
            titleIDToIDs.Add(TitleID, new List<int>());
        }
        titleIDToIDs[TitleID].Add(id);
    }
    public static List<int> GetIdsByTitleID(int titleID)
    {
        if (titleIDToIDs.ContainsKey(titleID))
        {
            return titleIDToIDs[titleID];
        }
        return null;
    }
}
Core/GameEngine/Model/TelPartialConfig/TitleStarUpConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cfadfe5dcf5119848b6b5801a9feb444
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3CE_tagMCTitleStarInfo.cs
@@ -1,11 +1,13 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// A3 CE 称号星级信息 #tagMCTitleStarInfo
public class DTCA3CE_tagMCTitleStarInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA3CE_tagMCTitleStarInfo vNetData = vNetPack as HA3CE_tagMCTitleStarInfo;
        ModelCenter.Instance.GetModel<TitleModel>().UpdateTitleStarInfo(vNetData);
    }
}
System/Mount/MountSkinWin.cs
@@ -29,7 +29,9 @@
        [SerializeField] List<Text> AttrValueList;
        [SerializeField] Transform starUpObj;
        [SerializeField] List<Transform> starsObj;
        [SerializeField] Text fromStar;
        [SerializeField] Image arrowImg;
        [SerializeField] Text toStar;
        [SerializeField] List<ItemCell> itemCells;
        [SerializeField] ButtonEx starUpBtn;
        [SerializeField] Transform maxObj;
@@ -193,10 +195,7 @@
            int star = 0;
            mountModel.horseStarDict.TryGetValue(horseID, out star);
            for (int i = 0; i < selectThemount.starsImg.Count; i++)
            {
                selectThemount.starsImg[i].SetActive(i < star);
            }
            selectThemount.starText.text = star > 0 ? Language.Get("EquipStarLevel", star) : string.Empty;
            if (horseID == signHorseID)
            {
@@ -271,17 +270,18 @@
                    int star = 0;
                    mountModel.horseStarDict.TryGetValue(signHorseID, out star);
                    int maxStar = HorseStarUpConfig.horseIDToIDs[signHorseID].Count;
                    for (int i = 0; i < starsObj.Count; i++)
                    if (star < maxStar)
                    {
                        fromStar.text = Language.Get("EquipStarLevel", star);
                        toStar.text = Language.Get("EquipStarLevel", star + 1);
                        arrowImg.SetActive(true);
                    }
                    else
                    {
                        if (i < maxStar)
                        {
                            starsObj[i].SetActive(true);
                            starsObj[i].FindComponent("Image", "Img_Star_True").SetActive(i < star);
                        }
                        else
                        {
                            starsObj[i].SetActive(false);
                        }
                        fromStar.text = Language.Get("EquipStarLevel", star);
                        toStar.text = string.Empty;
                        arrowImg.SetActive(false);
                    }
                    int[][] awards = new int[][] { };
@@ -325,8 +325,6 @@
                    maxObj.SetActive(star == maxStar);
                    starUpBtn.AddListener(() =>
                    {
                        if (star < maxStar)
                            starsObj[star].GetComponent<UIEffect>().Play();
                        CA535_tagCMHorseStarUp pak = new CA535_tagCMHorseStarUp();
                        pak.HorseID = (uint)signHorseID;
                        GameNetSystem.Instance.SendInfo(pak);
System/Mount/SelectThemount.cs
@@ -63,11 +63,11 @@
            set { m_QualityTxt1 = value; }
        }
        [SerializeField] List<Image> m_starsImg;//星级
        public List<Image> starsImg
        [SerializeField] Text m_starText;//星级
        public Text starText
        {
            get { return m_starsImg; }
            set { starsImg = value; }
            get { return m_starText; }
            set { m_starText = value; }
        }
    }
System/Role/RoleTitle.cs
@@ -149,6 +149,14 @@
            {
                return -newget_x.CompareTo(newget_y);
            }
            bool isRed_x = model.IsStarRedpoint(x);
            bool isRed_y = model.IsStarRedpoint(y);
            if (isRed_x.CompareTo(isRed_y) != 0)
            {
                return -isRed_x.CompareTo(isRed_y);
            }
            bool isGetx = model.IsTitleGain(x);
            bool isGety = model.IsTitleGain(y);
            if (isGetx.CompareTo(isGety) != 0)
@@ -190,8 +198,8 @@
        protected override void OnPreOpen()
        {
            model.OnRefreshGainTitle += OnRefreshGainTitle;
            C0335_tagCPlayerDienstgradRefresh titlePack = new C0335_tagCPlayerDienstgradRefresh();
            GameNetSystem.Instance.SendInfo(titlePack);
            //C0335_tagCPlayerDienstgradRefresh titlePack = new C0335_tagCPlayerDienstgradRefresh();
            //GameNetSystem.Instance.SendInfo(titlePack);
            OnIsGetTitle();
            m_Controller.JumpIndex(0);
        }
System/Role/RoleTitleCell.cs
@@ -5,6 +5,7 @@
using Snxxz.UI;
using System;
using System.Security.Cryptography;
namespace EnhancedUI.EnhancedScroller
{
@@ -16,6 +17,9 @@
        [SerializeField] Image m_TitleEquipImg;
        [SerializeField] Button m_TitleGetBtn;
        [SerializeField] RectTransform m_ContainerNewGet;
        [SerializeField] Button m_StarBtn;
        [SerializeField] Text m_StarTxt;
        [SerializeField] RedpointBehaviour redpoint;
        TitleModel m_Model;
        TitleModel model
@@ -101,6 +105,23 @@
                    }
                });
            }
            if (titleData == null || !TitleStarUpConfig.titleIDToIDs.ContainsKey(_titleId))
            {
                m_StarBtn.SetActive(false);
                redpoint.redpointId = 0;
            }
            else
            {
                redpoint.redpointId = 1010104 * 1000 + _titleId;
                m_StarBtn.SetActive(true);
                m_StarTxt.text = Language.Get("EquipStar11", model.GetTitleStar(_titleId));
                m_StarBtn.AddListener(() =>
                {
                    model.selectTitleId = _titleId;
                    WindowJumpMgr.Instance.WindowJumpToEx("TitleStarUpWin");
                });
            }
        }
        private void OnTitleUseClick(int _index)
System/Role/TitleModel.cs
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using UnityEngine;
namespace Snxxz.UI
{
@@ -10,20 +11,31 @@
    {
        const string TITLEKEY = "Title";
        public int selectTitleId; //点击升星的称号ID  和 presentSelectTitle 不一样用处
        public bool reikiPointRemindSymble { get; private set; }
        ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
        public Dictionary<int, int> titleStarDict = new Dictionary<int, int>(); //称号ID:星级
        public event Action OnTitleStarUpdate;
        public Dictionary<int, Redpoint> titleStarRedpoints = new Dictionary<int, Redpoint>();
        ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        public override void Init()
        {
            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
            //GlobalTimeEvent.Instance.secondEvent += SecondEvent;
            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
            WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
            foreach (var _id in TitleStarUpConfig.titleIDToIDs.Keys)
            {
                titleStarRedpoints.Add(_id, new Redpoint(1010104, 1010104*1000 + _id));
            }
        }
        public override void UnInit()
        {
            GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
            //GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
            WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
        }
@@ -39,29 +51,28 @@
            roletitles.Clear();
        }
        private void SecondEvent()
        {
            foreach (var _id in roletitles.Keys)
            {
                if (!IsTitleGain(_id) && !roletitles[_id].outTimeNotify)
                {
                    roletitles[_id].outTimeNotify = true;
                    if (roletitles[_id].isEquiped)
                    {
                        var hero = PlayerDatas.Instance.hero;
                        if (hero != null)
                        {
                            hero.RequestName();
                        }
                    }
                    if (OnRefreshGainTitle != null)
                    {
                        OnRefreshGainTitle();
                    }
                    UpdateRedpoint();
                }
            }
        }
        //private void SecondEvent()
        //{
        //    foreach (var _id in roletitles.Keys)
        //    {
        //        if (!IsTitleGain(_id) && !roletitles[_id].outTimeNotify)
        //        {
        //            roletitles[_id].outTimeNotify = true;
        //            if (roletitles[_id].isEquiped)
        //            {
        //                var hero = PlayerDatas.Instance.hero;
        //                if (hero != null)
        //                {
        //                    hero.RequestName();
        //                }
        //            }
        //            if (OnRefreshGainTitle != null)
        //            {
        //                OnRefreshGainTitle();
        //            }
        //        }
        //    }
        //}
        public event Action OnRefreshGainTitle;
        private Dictionary<int, TitleData> roletitles = new Dictionary<int, TitleData>();
@@ -166,6 +177,8 @@
                roletitles.Remove(id);
                title = null;
            }
            if (OnRefreshGainTitle != null)
            {
                OnRefreshGainTitle();
@@ -298,6 +311,11 @@
            {
                TryOpenReikiRootPointRemind();
            }
            if (window is KnapSackWin)
            {
                UpdateRedpoint();
            }
        }
        void TryOpenReikiRootPointRemind()
@@ -325,6 +343,35 @@
            }
        }
        public void UpdateTitleStarInfo(HA3CE_tagMCTitleStarInfo netPack)
        {
            for (int i = 0; i < netPack.TitleStarList.Length; i++)
            {
                titleStarDict[(int)netPack.TitleStarList[i].TitleID] = netPack.TitleStarList[i].Star;
            }
            OnTitleStarUpdate?.Invoke();
            UpdateRedpoint();
        }
        public int GetTitleStar(int titleId)
        {
            int star = 0;
            titleStarDict.TryGetValue(titleId, out star);
            return star;
        }
        public bool IsStarRedpoint(int titleID)
        {
            if (titleStarRedpoints.ContainsKey(titleID))
            {
                return titleStarRedpoints[titleID].state == RedPointState.Simple;
            }
            return false;
        }
        #region 红点
        private Redpoint m_TitleRedpoint=new Redpoint(10101, 1010104);
        public Redpoint titleRedpoint
@@ -341,10 +388,21 @@
            }
            foreach (var _key in roletitles.Keys)
            {
                if (IsNewGet(_key))
                //物品足够升星则显示红点
                if (TitleStarUpConfig.titleIDToIDs.ContainsKey(_key))
                {
                    titleRedpoint.state = RedPointState.Simple;
                    break;
                    var star = GetTitleStar(_key);
                    var maxStar = TitleStarUpConfig.titleIDToIDs[_key].Count;
                    titleStarRedpoints[_key].state = RedPointState.None;
                    if (star < maxStar)
                    {
                        var id = TitleStarUpConfig.titleIDToIDs[_key][star];
                        var config = TitleStarUpConfig.Get(id);
                        if (packModel.GetItemCountByID(PackType.Item, config.StarUpNeedItemList[0][0]) >= config.StarUpNeedItemList[0][1])
                        {
                            titleStarRedpoints[_key].state = RedPointState.Simple;
                        }
                    }
                }
            }
        }
System/Role/TitleStarUpWin.cs
New file
@@ -0,0 +1,265 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, January 05, 2018
//--------------------------------------------------------
using LitJson;
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
//坐骑面板
namespace Snxxz.UI
{
    public class TitleStarUpWin : Window
    {
        [SerializeField] Text titleName;//被选中的
        [SerializeField] Image titleImg;
        [SerializeField] List<Text> AttrNameList;
        [SerializeField] List<Text> AttrValueList;
        [SerializeField] Text fromStar;
        [SerializeField] Image arrowImg;
        [SerializeField] Text toStar;
        [SerializeField] List<ItemCell> itemCells;
        [SerializeField] ButtonEx starUpBtn;
        [SerializeField] Transform maxObj;
        [SerializeField] UIEffect starEffect;
        [SerializeField] Button closeBtn;
        #region Built-in
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        TitleModel titleModel { get { return ModelCenter.Instance.GetModel<TitleModel>(); } }
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            closeBtn.SetListener(() =>
            {
                CloseClick();
            });
            starUpBtn.AddListener(() =>
            {
                var pak = new CA536_tagCMTitleStarUp();
                pak.TitleID = (uint)titleModel.selectTitleId;
                GameNetSystem.Instance.SendInfo(pak);
            });
        }
        protected override void OnPreOpen()
        {
            titleModel.OnTitleStarUpdate += OnTitleStarUpdate;
            if (!TitleStarUpConfig.titleIDToIDs.ContainsKey(titleModel.selectTitleId))
            {
                WindowCenter.Instance.Close<TitleStarUpWin>();
                return;
            }
            Display();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            titleModel.OnTitleStarUpdate -= OnTitleStarUpdate;
        }
        protected override void OnAfterClose()
        {
        }
        void OnTitleStarUpdate()
        {
            DisplayButton();
            ShowAttrText();
            DienstgradConfig config = DienstgradConfig.Get(titleModel.selectTitleId);
            titleName.text = config.Name + Language.Get("EquipStar11", titleModel.GetTitleStar(titleModel.selectTitleId));
            starEffect.Play();
        }
        void Display()
        {
            DisplayButton();
            ShowAttrText();
            DienstgradConfig config = DienstgradConfig.Get(titleModel.selectTitleId);
            titleName.text = config.Name + Language.Get("EquipStar11", titleModel.GetTitleStar(titleModel.selectTitleId));
            UIFrame frame = titleImg.GetComponent<UIFrame>();
            if (UIFrameMgr.Inst.ContainsFace(config.Image))
            {
                titleImg.raycastTarget = false;
                frame.enabled = true;
                frame.ResetFrame(config.Image);
            }
            else
            {
                frame.enabled = false;
                titleImg.SetSprite(config.Image);
            }
        }
        private void DisplayButton()
        {
            int star = titleModel.GetTitleStar(titleModel.selectTitleId);
            int maxStar = TitleStarUpConfig.titleIDToIDs[titleModel.selectTitleId].Count;
            if (star < maxStar)
            {
                fromStar.text = Language.Get("EquipStarLevel", star);
                toStar.text = Language.Get("EquipStarLevel", star + 1);
                arrowImg.SetActive(true);
            }
            else
            {
                fromStar.text = Language.Get("EquipStarLevel", star);
                toStar.text = string.Empty;
                arrowImg.SetActive(false);
            }
            int[][] awards = new int[][] { };
            if (star != maxStar)
            {
                var id = TitleStarUpConfig.titleIDToIDs[titleModel.selectTitleId][star];
                var nextStarConfig = TitleStarUpConfig.Get(id);
                awards = nextStarConfig.StarUpNeedItemList;
            }
            for (int i = 0; i < itemCells.Count; i++)
            {
                if (i < awards.Length)
                {
                    itemCells[i].SetActive(true);
                    int itemID = awards[i][0];
                    int needCnt = awards[i][1];
                    int hasCnt = packModel.GetItemCountByID(PackType.Item, itemID);
                    itemCells[i].Init(new ItemCellModel(itemID, false, 1));
                    itemCells[i].button.AddListener(() =>
                    {
                        ItemTipUtility.Show(itemID);
                    });
                    var cntTxt = itemCells[i].FindComponent("Text", "count") as Text;
                    if (hasCnt >= needCnt)
                    {
                        cntTxt.text = UIHelper.AppendColor(TextColType.Green, hasCnt.ToString(), true) + "/" + needCnt.ToString();
                    }
                    else
                    {
                        cntTxt.text = UIHelper.AppendColor(TextColType.Red, hasCnt.ToString(), true) + "/" + needCnt.ToString();
                    }
                }
                else
                {
                    itemCells[i].SetActive(false);
                }
            }
            starUpBtn.SetActive(star != maxStar);
            maxObj.SetActive(star == maxStar);
        }
        private void ShowAttrText()
        {
            ClearAttrText();
            int showIndex;
            Dictionary<int, int> allAttr = new Dictionary<int, int>();
            int star = titleModel.GetTitleStar(titleModel.selectTitleId);
            Dictionary<int, int> addAttr = new Dictionary<int, int>();
            int[] starTypeArr = new int[] { };
            int[] starValueArr = new int[] { };
            if (star > 0)
            {
                var id = TitleStarUpConfig.titleIDToIDs[titleModel.selectTitleId][star - 1];
                var starConfig = TitleStarUpConfig.Get(id);
                showIndex = 0;
                starTypeArr = starConfig.StarAttrType;
                starValueArr = starConfig.StarAttrValue;
                foreach (var attrID in starTypeArr)
                {
                    allAttr[attrID] = starValueArr[showIndex];
                    showIndex++;
                }
            }
            if (star < TitleStarUpConfig.titleIDToIDs[titleModel.selectTitleId].Count)
            {
                var id = TitleStarUpConfig.titleIDToIDs[titleModel.selectTitleId][star];
                var nextStarConfig = TitleStarUpConfig.Get(id);
                for (int i = 0; i < nextStarConfig.StarAttrType.Length; i++)
                {
                    if (!allAttr.ContainsKey(nextStarConfig.StarAttrType[i]))
                    {
                        //预览用
                        allAttr[nextStarConfig.StarAttrType[i]] = 0;
                    }
                    if (Array.IndexOf(starTypeArr, nextStarConfig.StarAttrType[i]) >= 0)
                    {
                        addAttr[nextStarConfig.StarAttrType[i]] = nextStarConfig.StarAttrValue[i] - starValueArr[i];
                    }
                    else
                    {
                        addAttr[nextStarConfig.StarAttrType[i]] = nextStarConfig.StarAttrValue[i];
                    }
                }
            }
            showIndex = 0;
            foreach (var attrID in allAttr.Keys)
            {
                AttrNameList[showIndex].text = PlayerPropertyConfig.Get(attrID).ShowName;
                if (addAttr.ContainsKey(attrID))
                {
                    AttrValueList[showIndex].text = PlayerPropertyConfig.GetValueDescription(attrID, allAttr[attrID]) + UIHelper.AppendColor(TextColType.Green, string.Format(" +{0}", PlayerPropertyConfig.GetValueDescription(attrID, addAttr[attrID])), true);
                }
                else
                {
                    AttrValueList[showIndex].text = PlayerPropertyConfig.GetValueDescription(attrID, allAttr[attrID]);
                }
                showIndex++;
            }
        }
        private void ClearAttrText()
        {
            for (int i = 0; i < AttrNameList.Count; i++)
            {
                AttrNameList[i].text = string.Empty;
                AttrValueList[i].text = string.Empty;
            }
        }
        #endregion
    }
}
System/Role/TitleStarUpWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 284bbac13bcb7874e8c2858d4dc9193e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Utility/ConfigInitiator.cs
@@ -327,6 +327,7 @@
        normalTasks.Add(new ConfigInitTask("FamilyBossHurtAward", () => { FamilyBossHurtAwardConfig.Init(); }, () => { return FamilyBossHurtAwardConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("RealmXXZL", () => { RealmXXZLConfig.Init(); }, () => { return RealmXXZLConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("HorseStarUp", () => { HorseStarUpConfig.Init(); }, () => { return HorseStarUpConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TitleStarUp", () => { TitleStarUpConfig.Init(); }, () => { return TitleStarUpConfig.inited; }));
    }