yyl
10 天以前 8589ec3bb98ff6c0207d0783838454204956418e
Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
10个文件已添加
20个文件已修改
1787 ■■■■■ 已修改文件
Main/Config/Configs/FBDJGEffectConfig.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/HeroTalentConfig.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMTravelWin.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BoneField/AdsManager.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FuncPreset/FuncPresetChooseCells.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildManager.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteHeaderCell.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteHeaderCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteNormalCell.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteNormalCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteWin.cs 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildNoteWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildOPWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/PlayerFairyData.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroGiftLineCell.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroGiftWin.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/InternalAffairs/AffairBaseWin.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/PackManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/MainWin.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Message/GMNotify.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeAutoSetCell.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeAutoSetCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeAutoSetWin.cs 530 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeAutoSetWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeEquipWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeManager.cs 617 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggePrayWin.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Mingge/MinggeWin.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/PhantasmPavilion/PhantasmPavilionManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/WarlordPavilion/WarlordPavilionManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/FBDJGEffectConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           Thursday, January 8, 2026
//    [  Date ]:           2026年1月28日
//--------------------------------------------------------
using System.Collections.Generic;
@@ -21,6 +21,7 @@
    public int EffQuality;
    public int AttrID;
    public int AttrValue;
    public int RandWeight;
    public override int LoadKey(string _key)
    {
@@ -41,6 +42,8 @@
            int.TryParse(tables[3],out AttrID); 
            int.TryParse(tables[4],out AttrValue); 
            int.TryParse(tables[5],out RandWeight);
        }
        catch (Exception exception)
        {
Main/Config/Configs/HeroTalentConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2025年8月5日
//    [  Date ]:           Wednesday, January 28, 2026
//--------------------------------------------------------
using System.Collections.Generic;
@@ -21,6 +21,9 @@
    public int Quality;
    public int AttrID;
    public int AttrValue;
    public int InitWeight;
    public int WashWeight;
    public int AweakWeight;
    public override int LoadKey(string _key)
    {
@@ -41,6 +44,12 @@
            int.TryParse(tables[3],out AttrID); 
            int.TryParse(tables[4],out AttrValue); 
            int.TryParse(tables[5],out InitWeight);
            int.TryParse(tables[6],out WashWeight);
            int.TryParse(tables[7],out AweakWeight);
        }
        catch (Exception exception)
        {
Main/System/BeautyMM/BeautyMMTravelWin.cs
@@ -172,10 +172,21 @@
            {
                continue;
            }
            if (index >= rateNameText.Length)
            {
                break;
            }
            rateNameText[index].text = ItemConfig.Get(config.AwardItemID).ItemName + "x" + config.AwardItemCnt;
            rateText[index].text = config.ShowRate;
            index++;
        }
        for (int i = index; i < rateNameText.Length; i++)
        {
            rateNameText[i].text = "";
            rateText[i].text = "";
        }
        horseRateText.text = TravelEventConfig.Get(101).ShowRate;
    }
Main/System/BoneField/AdsManager.cs
@@ -29,7 +29,7 @@
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEvent;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint;
        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
        DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
    }
Main/System/FuncPreset/FuncPresetChooseCells.cs
@@ -44,6 +44,11 @@
        curFuncType = funcType;
        var selectID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType(battleType, funcType);
        if (unFoldID != 0 && selectID != unFoldID)
        {
            //其他地方切换了方案,需要验证当前展开是不是同一个
            unFoldID = 0;
        }
        var showCount = FuncPresetManager.Instance.GetShowFuncPresetCount(funcType);
        unFoldBtn.SetActive(showCount > 4);
        unFoldBtn.AddListener(() =>
Main/System/Guild/GuildManager.cs
@@ -180,7 +180,7 @@
    public int zbgOrgPriceValue;
    public int zbgChangFamilyCD;
    public List<int> cutCntListForTalk = new List<int>();
    public int familyRecordMaxCount;
    void ParseConfig()
    {
@@ -219,6 +219,9 @@
        zbgOrgPriceValue = int.Parse(config.Numerical2);
        zbgChangFamilyCD = int.Parse(config.Numerical3);
        cutCntListForTalk = JsonMapper.ToObject<List<int>>(config.Numerical4);
        config = FuncConfigConfig.Get("FamilyNote");
        familyRecordMaxCount = int.Parse(config.Numerical1);
    }
@@ -865,7 +868,7 @@
            return false;
        }
        bool restart = false;
        for (int i = 0; i < vNetData.FamilyActionList.Length; i++)
        {
            int playerID = (int)vNetData.FamilyActionList[i].Value1;
Main/System/Guild/GuildNoteHeaderCell.cs
New file
@@ -0,0 +1,14 @@
using System.Collections.Generic;
using UnityEngine;
public class GuildNoteHeaderCell : MonoBehaviour
{
    [SerializeField] TextEx date;
    public void Display(int index, List<GuildNoteData> datas)
    {
        if (datas.IsNullOrEmpty() || index < 0 || index >= datas.Count)
            return;
        date.text = datas[index].Info;
    }
}
Main/System/Guild/GuildNoteHeaderCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c3a277ed730042a4987a4cc292e794a5
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildNoteNormalCell.cs
New file
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using UnityEngine;
public class GuildNoteNormalCell : MonoBehaviour
{
    [SerializeField] TextEx time;
    [SerializeField] TextEx content;
    public void Display(int index, List<GuildNoteData> datas)
    {
        if (datas.IsNullOrEmpty() || index < 0 || index >= datas.Count)
            return;
        DateTime currentTime = TimeUtility.GetTime(datas[index].Time);
        time.text = currentTime.ToString("HH:mm");
        content.text = datas[index].Info;
    }
    public float GetHeight(string info)
    {
        float height = 0f;
        if (string.IsNullOrEmpty(info))
            return height;
        content.text = info;
        height = content.preferredHeight;
        return height;
    }
}
Main/System/Guild/GuildNoteNormalCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e8536aad1963a3244986aedefefbcd5c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildNoteWin.cs
New file
@@ -0,0 +1,227 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;
/// <summary>
/// 公会日志界面
/// </summary>
public class GuildNoteWin : UIBase
{
    [SerializeField] Color32 nameColor;
    [SerializeField] Transform noNote;
    [SerializeField] Transform hasNote;
    [SerializeField] GuildNoteNormalCell guildNoteNormalCell;
    [SerializeField] ScrollerController scroller;
    [SerializeField] TextEx maxCount;
    protected override void OnPreOpen()
    {
        GuildManager.Instance.EnterOrQuitGuildEvent += OnEnterOrQuitGuildEvent;
        GuildManager.Instance.FamilyActionInfoEvent += OnFamilyActionInfoEvent;
        scroller.OnGetDynamicSize += OnGetChatDynamicSize;
        scroller.OnRefreshCell += OnRefreshCell;
        maxCount.text = Language.Get("Guild_82", GuildManager.Instance.familyRecordMaxCount);
        GuildManager.Instance.QueryFamilyAction(PlayerDatas.Instance.fairyData.fairy.FamilyID, GuildManager.MemberChangeActionType);
    }
    protected override void OnPreClose()
    {
        GuildManager.Instance.EnterOrQuitGuildEvent -= OnEnterOrQuitGuildEvent;
        GuildManager.Instance.FamilyActionInfoEvent -= OnFamilyActionInfoEvent;
        scroller.OnGetDynamicSize -= OnGetChatDynamicSize;
        scroller.OnRefreshCell -= OnRefreshCell;
    }
    private void OnEnterOrQuitGuildEvent(bool isEnter)
    {
        DelayCloseWindow().Forget();
    }
    private bool OnGetChatDynamicSize(ScrollerDataType type, int index, out float height)
    {
        height = 0;
        if (list.IsNullOrEmpty() || index < 0 || index >= list.Count)
            return false;
        var data = list[index];
        switch (type)
        {
            case ScrollerDataType.Header:
                height = 19;
                return true;
            case ScrollerDataType.Normal:
                height = guildNoteNormalCell.GetHeight(data.Info);
                return true;
        }
        return true;
    }
    private void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        if (type == ScrollerDataType.Header)
        {
            var _cell = cell.GetComponent<GuildNoteHeaderCell>();
            _cell?.Display(cell.index, list);
        }
        else
        {
            var _cell = cell.GetComponent<GuildNoteNormalCell>();
            _cell?.Display(cell.index, list);
        }
    }
    private void OnFamilyActionInfoEvent(int familyID, int actionType)
    {
        if (familyID != PlayerDatas.Instance.fairyData.fairy.FamilyID)
            return;
        if (actionType != GuildManager.MemberChangeActionType)
            return;
        Display();
    }
    List<GuildNoteData> list;
    private void Display()
    {
        if (!GuildManager.Instance.TryGetFamilyActions(GuildManager.MemberChangeActionType, out var actions))
        {
            hasNote.SetActive(false);
            noNote.SetActive(true);
            return;
        }
        list = GetShowGuildNoteDataList(actions);
        bool isNullOrEmpty = list.IsNullOrEmpty();
        if (isNullOrEmpty)
        {
            hasNote.SetActive(false);
            noNote.SetActive(true);
            return;
        }
        scroller.Refresh();
        if (!isNullOrEmpty)
        {
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].ShowType == 0)
                {
                    scroller.AddCell(ScrollerDataType.Header, i);
                }
                else
                {
                    scroller.AddCell(ScrollerDataType.Normal, i);
                }
            }
        }
        scroller.Restart();
        noNote.SetActive(isNullOrEmpty);
        hasNote.SetActive(!isNullOrEmpty);
    }
    private List<GuildNoteData> GetShowGuildNoteDataList(HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] actions)
    {
        List<GuildNoteData> list = GetGuildNoteDataList(actions);
        if (list.IsNullOrEmpty())
            return null;
        var result = new List<GuildNoteData>();
        int lastDay = -1;
        foreach (var noteData in list)
        {
            // 获取当前条目所属日期
            DateTime currentTime = TimeUtility.GetTime(noteData.Time);
            int currentDay = TimeUtility.GetPassDays((int)noteData.Time);
            // 检查是否需要插入日期标题
            if (lastDay == -1 || currentDay != lastDay)
            {
                // 获取目标天的凌晨时间戳
                DateTime dayStartTime = TimeUtility.GetDayStartTime(currentTime.Year, currentTime.Month, currentTime.Day);
                int dayStartSeconds = (int)(dayStartTime - TimeUtility.OriginalTime).TotalSeconds;
                result.Add(new GuildNoteData
                {
                    ShowType = 0, // 标题类型
                    Time = (uint)dayStartSeconds,
                    Info = currentTime.ToString("yyyy-MM-dd"),
                });
            }
            result.Add(noteData);
            lastDay = currentDay;
        }
        return result;
    }
    private List<GuildNoteData> GetGuildNoteDataList(HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] actions)
    {
        if (actions.IsNullOrEmpty())
            return null;
        var result = new List<GuildNoteData>();
        int maxCount = GuildManager.Instance.familyRecordMaxCount;
        // 倒序遍历actions,并限制数量
        int count = 0;
        for (int i = actions.Length - 1; i >= 0 && count < maxCount; i--)
        {
            var action = actions[i];
            string info = GetInfo(action);
            result.Add(new GuildNoteData
            {
                ShowType = 1, // 内容类型
                Time = action.Time,
                Info = info,
            });
            count++;
        }
        return result.OrderBy(a => a.Time).ToList();
    }
    private string GetInfo(HA513_tagMCFamilyActionInfo.tagMCFamilyAction data)
    {
        if (data == null || data.Value1 != 2)
            return string.Empty;
        switch (data.Value2)
        {
            case 0:
                return Language.Get("Guild_52", GetColorStr(data.Name));
            case 1:
                return Language.Get("Guild_53", GetColorStr(data.Name));
            case 2:
                return Language.Get("Guild_55", GetColorStr(data.Name));
            case 4:
                if (data.Value3 > data.Value4)
                {
                    return Language.Get("Guild_54", GetColorStr(data.Name), GetColorStr(RichTextMsgReplaceConfig.GetRichReplace("FAMILY", (int)data.Value3)));
                }
                else
                {
                    return Language.Get("Guild_83", GetColorStr(data.Name), GetColorStr(RichTextMsgReplaceConfig.GetRichReplace("FAMILY", (int)data.Value3)));
                }
            case 3:
            default:
                return string.Empty;
        }
    }
    private string GetColorStr(string name)
    {
        return UIHelper.AppendColor(nameColor, name);
    }
}
public class GuildNoteData
{
    public uint Time;          //时间戳
    public int ShowType;       //显示用途类型 0-标题(年-月-日) 1-内容
    public string Info;        //信息
}
Main/System/Guild/GuildNoteWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f0e090843a250514f8fabb9b8713e625
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildOPWin.cs
@@ -43,7 +43,7 @@
        
        noteBtn.AddListener(() =>
        {
            // UIManager.Instance.OpenWindow<GuildNoteWin>();
            UIManager.Instance.OpenWindow<GuildNoteWin>();
        });
        
    }
Main/System/Guild/PlayerFairyData.cs
@@ -29,6 +29,7 @@
    // 0-成员,1-精英,2-副盟主,3-盟主
    public int leaderID;
    public string leaderName;
    // // 精英
    public List<int> elitePlayerIDList = new List<int>();
    // // 副盟主
@@ -102,6 +103,7 @@
            if (member.FmLV == 3)
            {
                leaderID = (int)member.PlayerID;
                leaderName = member.Name;
            }
        }
@@ -142,6 +144,7 @@
        memberDic.Clear();
        memberIDList.Clear();
        leaderID = 0;
        leaderName = string.Empty;
    }
    int SortMember(int id1, int id2)
Main/System/HeroUI/HeroGiftLineCell.cs
@@ -6,10 +6,10 @@
    [SerializeField] GiftBaseCell[] cardList;
    public void Display(int index, List<int> configList)
    {
    {
        for (int i = 0; i < cardList.Length; i++)
        {
            if (index < configList.Count)
            if (index + i < configList.Count)
            {
                var giftID = configList[index + i];
                var giftLV = HeroUIManager.Instance.maxGiftLevel;
Main/System/HeroUI/HeroGiftWin.cs
@@ -17,7 +17,7 @@
    protected override void OnPreOpen()
    {
        scroller.OnRefreshCell += OnRefreshCell;
        CreateScroller();
    }
@@ -27,10 +27,22 @@
    }
    private List<int> GetKeys()
    {
        List<int> res = new List<int>();
        foreach (var config in HeroTalentConfig.GetValues())
        {
            if (config.InitWeight == 0 || config.WashWeight == 0 || config.AweakWeight == 0)
                continue;
            res.Add(config.TalentID);
        }
        return res;
    }
    List<int> configList = new List<int>();
    void CreateScroller()
    {
        configList = HeroTalentConfig.GetKeys().ToList();
        configList = GetKeys();
        var totalCount = configList.Count;
        scroller.Refresh();
Main/System/InternalAffairs/AffairBaseWin.cs
@@ -26,6 +26,7 @@
    [SerializeField] HeroSkinModel[] funcNPCs;
    [SerializeField] Transform[] talkRects;
    [SerializeField] Text[] talkTexts;
    [SerializeField] UIEffectPlayer autoMGEffect;
    protected override void InitComponent()
    {
@@ -58,12 +59,14 @@
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
        GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
        MinggeManager.Instance.ChangeAutoEvent += ChangeAutoEvent;
        
        Display();
        if (GoldRushManager.Instance.openAutoGoldRush)
        {
        {
            GoldRushManager.Instance.GetAllAward();
        }
        ChangeAutoEvent();
    }
    protected override void OnPreClose()
@@ -73,8 +76,28 @@
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
        GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
        MinggeManager.Instance.ChangeAutoEvent -= ChangeAutoEvent;
    }
    void ChangeAutoEvent()
    {
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mingge))
        {
            return;
        }
        if (MinggeManager.Instance.isStartAuto)
        {
            autoMGEffect.Play();
            funcNPCs[5].GetModel().PlayAnimation("suanming", true);
        }
        else
        {
            autoMGEffect.Stop();
            funcNPCs[5].GetModel().PlayAnimation("idle", true);
        }
    }
    protected override void OnOpen()
    {
        GoldRushManager.Instance.ResumeAutoWorking();
Main/System/KnapSack/PackManager.cs
@@ -182,6 +182,8 @@
        {
            refrechPackEvent(packType);
        }
        RefreshItemEvent?.Invoke(packType, -1, -1); //只做一次通知用
        
        DelayNotifyPackChange(packType);
    }
Main/System/Main/MainWin.cs
@@ -32,6 +32,7 @@
    [SerializeField] Text multiFightText;
    [SerializeField] Transform gameTip; //10连
    [SerializeField] Transform mgTip;
    bool isForcePlayFightUIAnim = true; //强制播放战斗锤子框动画
@@ -69,6 +70,7 @@
        EventBroadcast.Instance.AddListener<string>(EventName.BATTLE_START, OnBattleStart);
        base.OnPreOpen();
        mgTip.SetActive(false);
        // 刷新UI
        Display();
    }
@@ -107,6 +109,8 @@
                GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
            }
        }
        mgTip.SetActive(MinggeManager.Instance.isPauseAuto);
    }
    void DisplayTopBar()
@@ -120,6 +124,10 @@
        {
            multiFightText.text = Language.Get("MultiFight", AutoFightModel.Instance.fightCost);
        }
        if (_ui.name == "MinggeWin")
        {
            mgTip.SetActive(false);
        }
    }
    //战斗按钮动画
Main/System/Message/GMNotify.cs
@@ -15,8 +15,8 @@
    public override void Release()
    {
        GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
    }
    public void OnBeforePlayerDataInitializeEventOnRelogin()
Main/System/Mingge/MinggeAutoSetCell.cs
New file
@@ -0,0 +1,58 @@
using UnityEngine;
using UnityEngine.UI;
using System;
//命格自动的各个选项内容,统一用一个按类型区分
public class MinggeAutoSetCell : CellView
{
    [SerializeField] Text contentText;
    [SerializeField] Image selectImg;
    [SerializeField] Button selectBtn;
    //type 滚动条用途类型
    //index 根据类型自定义
    public void Display(int type, int index, MinggeAutoSet autoSet, Action<int> onSelect)
    {
        if (type == 1)
        {
            //品质
            string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(index).ColorName);
            contentText.text = Language.Get("Mingge30", UIHelper.AppendColor(index, qualityName, true, 2));
            selectImg.SetActive(autoSet.quanlity == index);
        }
        else if (type == 2)
        {
            //战斗属性
            contentText.text = index == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(index).Name;
            selectImg.SetActive(autoSet.fightAttrID == index);
        }
        else if (type == 3)
        {
            //抗性属性
            contentText.text = index == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(index).Name;
            selectImg.SetActive(autoSet.deFightAttrID == index);
        }
        else if (type == 4)
        {
            //命格技能
            contentText.text = index == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{index}");
            selectImg.SetActive(autoSet.skillID == index);
        }
        else if (type == 5)
        {
            //消耗数量
            contentText.text = index.ToString();
            selectImg.SetActive(MinggeManager.Instance.autoCostCount == index);
        }
        selectBtn.AddListener(() =>
        {
            onSelect?.Invoke(index);
        });
    }
}
Main/System/Mingge/MinggeAutoSetCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 77c0bb1754a43d14985f5b7a2942530e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Mingge/MinggeAutoSetWin.cs
New file
@@ -0,0 +1,530 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class MinggeAutoSetWin : UIBase
{
    [SerializeField] ScrollRect scrollRect;
    [SerializeField] GroupButtonEx[] presetBtns;
    List<Text> presetNameTexts = new List<Text>();
    [SerializeField] Button selectQualityBtn;   //品质选择
    [SerializeField] Text qualityText;
    [SerializeField] ScrollerController qualityScroller;
    [SerializeField] Toggle startToggle;
    [SerializeField] Toggle fightPowerToggle;   //战斗力
    [SerializeField] Toggle andFPToggle;
    [SerializeField] Toggle orFPToggle;
    [SerializeField] Toggle attrToggle;  //属性
    [SerializeField] Button fightAttrBtn;   //六大战斗属性 + 先手
    [SerializeField] Text fightAttrText;
    [SerializeField] ScrollerController fightAttrScroller;
    [SerializeField] Button deFightAttrBtn;   //六大战斗抗性属性
    [SerializeField] Text deFightAttrText;
    [SerializeField] ScrollerController deFightAttrScroller;
    [SerializeField] Toggle skillToggle;   //技能
    [SerializeField] Button skillBtn;
    [SerializeField] Text skillText;
    [SerializeField] ScrollerController skillScroller;
    [SerializeField] Toggle andSkillToggle;
    [SerializeField] Toggle orSkillToggle;
    [SerializeField] Toggle useMoreItemToggle;   //使用更多物品 不勾选默认消耗1个
    [SerializeField] Button useMoreItemBtn;
    [SerializeField] Text useMoreItemText;
    [SerializeField] ScrollerController useMoreItemScroller;
    [SerializeField] Text itemNameText;
    [SerializeField] Toggle speedUPToggle;   //加速 特效播放加速
    [SerializeField] Button startBtn;
    [SerializeField] Button cancelBtn;
    MinggeAutoSet autoSetData;
    int selectPresetID = 0;
    protected override void InitComponent()
    {
        presetNameTexts.Clear();
        for (int i = 0; i < presetBtns.Length; i++)
        {
            int index = i + 1;
            presetBtns[i].AddListener(() =>
            {
                selectPresetID = index;
                Display();
            });
            presetNameTexts.Add(presetBtns[i].GetComponentInChildren<Text>());
        }
        selectQualityBtn.AddListener(() =>
        {
            qualityScroller.SetActive(true);
        });
        startToggle.onValueChanged.AddListener((bool isOn) =>
        {
            ClickStartToggle(isOn);
        });
        fightPowerToggle.onValueChanged.AddListener((bool isOn) =>
        {
            autoSetData.fightPowerToggle = isOn;
            FixAndOrFBToggle();
            FixAndOrSkillToggle();
        });
        andFPToggle.onValueChanged.AddListener((bool isOn) =>
        {
            ClickAndOrFPToggle(isOn);
        });
        orFPToggle.onValueChanged.AddListener((bool isOn) =>
        {
            ClickAndOrFPToggle(isOn);
        });
        attrToggle.onValueChanged.AddListener((bool isOn) =>
        {
            autoSetData.fightAttrToggle = isOn;
            FixAndOrFBToggle();
            FixAndOrSkillToggle();
        });
        fightAttrBtn.AddListener(() =>
        {
            fightAttrScroller.SetActive(true);
        });
        deFightAttrBtn.AddListener(() =>
        {
            deFightAttrScroller.SetActive(true);
        });
        skillToggle.onValueChanged.AddListener((bool isOn) =>
        {
            autoSetData.skillToggle = isOn;
            FixAndOrFBToggle();
            FixAndOrSkillToggle();
        });
        skillBtn.AddListener(() =>
        {
            skillScroller.SetActive(true);
        });
        andSkillToggle.onValueChanged.AddListener((bool isOn) =>
        {
            ClickAndOrSkillToggle(isOn);
        });
        orSkillToggle.onValueChanged.AddListener((bool isOn) =>
        {
            ClickAndOrSkillToggle(isOn);
        });
        useMoreItemToggle.onValueChanged.AddListener((bool isOn) =>
        {
            MinggeManager.Instance.autoCostToggle = isOn;
        });
        useMoreItemBtn.AddListener(() =>
        {
            useMoreItemScroller.SetActive(true);
        });
        speedUPToggle.onValueChanged.AddListener((bool isOn) =>
        {
            if (!InvestModel.Instance.IsInvested(InvestModel.monthCardType))
            {
                speedUPToggle.SetIsOnWithoutNotify(false);
                SysNotifyMgr.Instance.ShowTip("MinggeAuto5");
                UIManager.Instance.OpenWindow<PrivilegeCardWin>();
                return;
            }
            MinggeManager.Instance.autoSpeedUP = isOn;
        });
        startBtn.AddListener(() =>
        {
            if (!MinggeManager.Instance.qlNotNotify && PackManager.Instance.GetItemCountByID(PackType.Item, MinggeManager.Instance.qlItemID) > 0)
            {
                ConfirmCancel.ToggleConfirmCancel(
                    Language.Get("L1003"),
                    Language.Get("Mingge31"),
                    Language.Get("TianziBillborad08"),
                    Language.Get("Mingge35"),
                    Language.Get("Mingge34"),
                    (bool isOK, bool isToggle) =>
                    {
                        if (isOK)
                        {
                            CloseWindow();
                            UIManager.Instance.OpenWindow<MinggePrayWin>();
                        }
                        else
                        {
                            MinggeManager.Instance.StartAuto(true);
                        }
                        MinggeManager.Instance.qlNotNotify = isToggle;
                    },
                    false
                );
                return;
            }
            MinggeManager.Instance.StartAuto(true);
        });
        cancelBtn.AddListener(() =>
        {
            MinggeManager.Instance.StartAuto(false);
            cancelBtn.SetActive(false);
            startBtn.SetActive(true);
        });
    }
    protected override void OnPreOpen()
    {
        selectPresetID = FuncPresetManager.Instance.GetFuncPresetID((int)FuncPresetType.Mingge);
        if (MinggeManager.Instance.isStartAuto)
        {
            MinggeManager.Instance.isPauseAuto = true;
            SysNotifyMgr.Instance.ShowTip("MinggeAuto4");
        }
        qualityScroller.OnRefreshCell += OnRefreshQualityCell;
        fightAttrScroller.OnRefreshCell += OnRefreshFightAttrCell;
        deFightAttrScroller.OnRefreshCell += OnRefreshDeFightAttrCell;
        skillScroller.OnRefreshCell += OnRefreshSkillCell;
        useMoreItemScroller.OnRefreshCell += OnRefreshUseMoreItemCell;
        CreateScroller();
        DisplayPresetBtns();
        Display();
    }
    protected override void OnPreClose()
    {
        MinggeManager.Instance.isPauseAuto = false;
        if (MinggeManager.Instance.isStartAuto)
        {
            SysNotifyMgr.Instance.ShowTip("MinggeAuto3");
            MinggeManager.Instance.CalcEquip();
        }
        qualityScroller.OnRefreshCell -= OnRefreshQualityCell;
        fightAttrScroller.OnRefreshCell -= OnRefreshFightAttrCell;
        deFightAttrScroller.OnRefreshCell -= OnRefreshDeFightAttrCell;
        skillScroller.OnRefreshCell -= OnRefreshSkillCell;
        useMoreItemScroller.OnRefreshCell -= OnRefreshUseMoreItemCell;
    }
    public void Display()
    {
        autoSetData = MinggeManager.Instance.GetMGAutoSet(selectPresetID);
        if (autoSetData == null)
        {
            return;
        }
        string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(autoSetData.quanlity).ColorName);
        qualityText.text = Language.Get("Mingge30", UIHelper.AppendColor(autoSetData.quanlity, qualityName, true, 2));
        startToggle.SetIsOnWithoutNotify(autoSetData.startToggle);
        fightPowerToggle.SetIsOnWithoutNotify(autoSetData.fightPowerToggle);
        andFPToggle.SetIsOnWithoutNotify(autoSetData.andOrFPToggle == 1);
        orFPToggle.SetIsOnWithoutNotify(autoSetData.andOrFPToggle == 2);
        attrToggle.SetIsOnWithoutNotify(autoSetData.fightAttrToggle);
        fightAttrText.text = autoSetData.fightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.fightAttrID).Name;
        deFightAttrText.text = autoSetData.deFightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.deFightAttrID).Name;
        skillToggle.SetIsOnWithoutNotify(autoSetData.skillToggle);
        skillText.text = autoSetData.skillID == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{autoSetData.skillID}");
        andSkillToggle.SetIsOnWithoutNotify(autoSetData.andOrSkillToggle == 1);
        orSkillToggle.SetIsOnWithoutNotify(autoSetData.andOrSkillToggle == 2);
        useMoreItemToggle.SetIsOnWithoutNotify(MinggeManager.Instance.autoCostToggle);
        useMoreItemText.text = MinggeManager.Instance.autoCostCount.ToString();
        itemNameText.text = ItemConfig.Get(MinggeManager.Instance.tyItemID).ItemName;
        cancelBtn.SetActive(MinggeManager.Instance.isStartAuto);
        startBtn.SetActive(!MinggeManager.Instance.isStartAuto);
    }
    public void DisplayPresetBtns()
    {
        var cnt = FuncPresetManager.Instance.GetUnlockCnt((int)FuncPresetType.Mingge);
        if (cnt == 1)
        {
            cnt = 0;
        }
        if (cnt > 0)
        {
            scrollRect.SetActive(true);
            for (int i = 0; i < presetBtns.Length; i++)
            {
                if (i < cnt)
                {
                    presetBtns[i].SetActive(true);
                    presetNameTexts[i].text = FuncPresetManager.Instance.GetFuncPreset((int)FuncPresetType.Mingge, i + 1).PresetName;
                }
                else
                {
                    presetBtns[i].SetActive(false);
                }
            }
            presetBtns[selectPresetID - 1].SelectBtn();
            //滚动到 selectPresetID 位置
            scrollRect.horizontalNormalizedPosition = selectPresetID < 4 ? 0 : selectPresetID * 1f / cnt;
        }
        else
        {
            scrollRect.SetActive(false);
        }
    }
    void ClickStartToggle(bool isOn)
    {
        autoSetData.startToggle = isOn;
        if (!isOn)
        {
            //检查多方案中至少一个勾选
            if (!MinggeManager.Instance.CanChangeStartToFalse(selectPresetID))
            {
                startToggle.SetIsOnWithoutNotify(true);
                autoSetData.startToggle = true;
                SysNotifyMgr.Instance.ShowTip("MinggeAuto2");
            }
        }
    }
    void ClickAndOrFPToggle(bool isOn)
    {
        //只有战斗和其他的激活后才能 勾选
        FixAndOrFBToggle();
    }
    void ClickAndOrSkillToggle(bool isOn)
    {
        //技能和其他任一激活后才能 勾选
        FixAndOrSkillToggle();
    }
    void FixAndOrFBToggle()
    {
        //只有战斗和属性激活后才能 勾选
        //帮取消的情况
        if (!fightPowerToggle.isOn || !attrToggle.isOn)
        {
            if (andFPToggle.isOn)
            {
                andFPToggle.SetIsOnWithoutNotify(false);
            }
            if (orFPToggle.isOn)
            {
                orFPToggle.SetIsOnWithoutNotify(false);
            }
        }
        //帮勾选的情况,默认勾同时
        if (fightPowerToggle.isOn && attrToggle.isOn)
        {
            if (!andFPToggle.isOn && !orFPToggle.isOn)
            {
                andFPToggle.SetIsOnWithoutNotify(true);
            }
        }
        RefreshAndOrFBToggleValue();
    }
    void FixAndOrSkillToggle()
    {
        //技能和其他任一激活后才能 勾选
        //帮取消的情况
        if (!skillToggle.isOn || (!attrToggle.isOn && !fightPowerToggle.isOn))
        {
            if (andSkillToggle.isOn)
            {
                andSkillToggle.SetIsOnWithoutNotify(false);
            }
            if (orSkillToggle.isOn)
            {
                orSkillToggle.SetIsOnWithoutNotify(false);
            }
        }
        //帮勾选的情况,默认勾同时
        if (skillToggle.isOn && (attrToggle.isOn || fightPowerToggle.isOn))
        {
            if (!andSkillToggle.isOn && !orSkillToggle.isOn)
            {
                orSkillToggle.SetIsOnWithoutNotify(true);
            }
        }
        RefreshAndOrSkillToggleValue();
    }
    void RefreshAndOrFBToggleValue()
    {
        if (andFPToggle.isOn)
        {
            autoSetData.andOrFPToggle = 1;
        }
        else if (orFPToggle.isOn)
        {
            autoSetData.andOrFPToggle = 2;
        }
        else
        {
            autoSetData.andOrFPToggle = 0;
        }
    }
    void RefreshAndOrSkillToggleValue()
    {
        if (andSkillToggle.isOn)
        {
            autoSetData.andOrSkillToggle = 1;
        }
        else if (orSkillToggle.isOn)
        {
            autoSetData.andOrSkillToggle = 2;
        }
        else
        {
            autoSetData.andOrSkillToggle = 0;
        }
    }
    void CreateScroller()
    {
        var rateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying);
        //倒序删除 概率为0的 直到有概率大于0的
        for (int i = rateList.Count - 1; i >= 0; i--)
        {
            if (rateList[i] == 0)
            {
                rateList.RemoveAt(i);
            }
            else
            {
                break;
            }
        }
        var rect = qualityScroller.GetComponent<RectTransform>();
        rect.sizeDelta = new Vector2(rect.sizeDelta.x, rateList.Count * 50);
        qualityScroller.Refresh();
        for (int i = 1; i <= rateList.Count; i++)
        {
            qualityScroller.AddCell(ScrollerDataType.Header, i);
        }
        qualityScroller.Restart();
        fightAttrScroller.Refresh();
        for (int i = 0; i < MinggeManager.Instance.fightAttrIDList.Length; i++)
        {
            fightAttrScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.fightAttrIDList[i]);
        }
        fightAttrScroller.Restart();
        deFightAttrScroller.Refresh();
        for (int i = 0; i < MinggeManager.Instance.deFightAttrIDList.Length; i++)
        {
            deFightAttrScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.deFightAttrIDList[i]);
        }
        deFightAttrScroller.Restart();
        skillScroller.Refresh();
        //特殊处理 需要加上第一个任意
        for (int i = 0; i <= MinggeManager.Instance.minggeSkillTypeIDList.Length; i++)
        {
            if (i == 0)
            {
                skillScroller.AddCell(ScrollerDataType.Header, 0);
            }
            else
            {
                skillScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.minggeSkillTypeIDList[i - 1]);
            }
        }
        skillScroller.Restart();
        useMoreItemScroller.Refresh();
        for (int i = 0; i < MinggeManager.Instance.autoCostCntList.Length; i++)
        {
            useMoreItemScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.autoCostCntList[i]);
        }
        useMoreItemScroller.Restart();
    }
    void OnRefreshQualityCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as MinggeAutoSetCell;
        _cell.Display(1, cell.index, autoSetData, (value) =>
        {
            qualityScroller.SetActive(false);
            autoSetData.quanlity = value;
            string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(autoSetData.quanlity).ColorName);
            qualityText.text = Language.Get("Mingge30", UIHelper.AppendColor(autoSetData.quanlity, qualityName, true, 2));
        });
    }
    void OnRefreshFightAttrCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as MinggeAutoSetCell;
        _cell.Display(2, cell.index, autoSetData, (value) =>
        {
            fightAttrScroller.SetActive(false);
            autoSetData.fightAttrID = value;
            fightAttrText.text = autoSetData.fightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.fightAttrID).Name;
        });
    }
    void OnRefreshDeFightAttrCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as MinggeAutoSetCell;
        _cell.Display(3, cell.index, autoSetData, (value) =>
        {
            deFightAttrScroller.SetActive(false);
            autoSetData.deFightAttrID = value;
            deFightAttrText.text = autoSetData.deFightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.deFightAttrID).Name;
        });
    }
    void OnRefreshSkillCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as MinggeAutoSetCell;
        _cell.Display(4, cell.index, autoSetData, (value) =>
        {
            skillScroller.SetActive(false);
            autoSetData.skillID = value;
            skillText.text = autoSetData.skillID == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{autoSetData.skillID}");
        });
    }
    void OnRefreshUseMoreItemCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as MinggeAutoSetCell;
        _cell.Display(5, cell.index, autoSetData, (value) =>
        {
            useMoreItemScroller.SetActive(false);
            MinggeManager.Instance.autoCostCount = value;
            useMoreItemText.text = MinggeManager.Instance.autoCostCount.ToString();
        });
    }
}
Main/System/Mingge/MinggeAutoSetWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cb3d1b698a5646743b6cab34a223e267
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Mingge/MinggeEquipWin.cs
@@ -7,7 +7,6 @@
{
    [SerializeField] MinggeEquipChangeCell oldEquipCell;
    [SerializeField] MinggeEquipChangeCell newEquipCell;
    [SerializeField] Transform presetObj;
    [SerializeField] ScrollRect scrollRect;
    [SerializeField] GroupButtonEx[] presetBtns;
    List<Text> presetNameTexts = new List<Text>();
@@ -41,6 +40,15 @@
    protected override void OnPreClose()
    {
        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
        MinggeManager.Instance.equipShowPresetID = 0;
        MinggeManager.Instance.selectFloorEquip = null;
        if (!UIManager.Instance.IsOpened<MinggeAutoSetWin>())
        {
            MinggeManager.Instance.isPauseAuto = false;
        }
        MinggeManager.Instance.redpointAuto.state = RedPointState.None;
    }
    void RefreshItemEvent(PackType packType, int index, int itemID)
@@ -61,7 +69,7 @@
        }
        if (cnt > 0)
        {
            presetObj.SetActive(true);
            scrollRect.SetActive(true);
            for (int i = 0; i < presetBtns.Length; i++)
            {
                if (i < cnt)
@@ -80,7 +88,7 @@
        }
        else
        {
            presetObj.SetActive(false);
            scrollRect.SetActive(false);
        }
        if (MinggeManager.Instance.selectFloorEquip == null || MinggeManager.Instance.selectFloorEquip.config == null)
        {
Main/System/Mingge/MinggeManager.cs
@@ -2,6 +2,7 @@
using UnityEngine;
using LitJson;
using System;
using System.Linq;
public class MinggeManager : GameSystemManager<MinggeManager>
@@ -20,11 +21,8 @@
    public Dictionary<int, long> minggeAttrDict = new Dictionary<int, long>();
    //自动设置
    public int autoCostCnt; //自动推演消耗个数
    public bool isOpenAuto;
    public bool qlNotNotify;
    //配置
    public const int TotleEquip = 12; //一套装备的总数
@@ -39,21 +37,25 @@
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeRelogin;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOK;
        FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent;
        GlobalTimeEvent.Instance.MSEvent += OnMSEvent;
        ParseConfig();
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeRelogin;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOK;
        FuncPresetManager.Instance.OnFuncPresetUseDataEvent -= OnFuncPresetUseDataEvent;
        GlobalTimeEvent.Instance.MSEvent -= OnMSEvent;
    }
@@ -69,6 +71,13 @@
        minggeItemTypeList = JsonMapper.ToObject<int[]>(config.Numerical4);
        minggeSkillTypeIDList = JsonMapper.ToObject<int[]>(config.Numerical5);
        config = FuncConfigConfig.Get("MinggeTY2");
        fightAttrIDList = JsonMapper.ToObject<int[]>(config.Numerical1);
        deFightAttrIDList = JsonMapper.ToObject<int[]>(config.Numerical2);
        autoCostCntList = JsonMapper.ToObject<int[]>(config.Numerical3);
        autoTYCDs = JsonMapper.ToObject<float[]>(config.Numerical4);
        needOfficialRank = int.Parse(config.Numerical5);
        for (int i = 0; i < minggeItemTypeList.Length; i++)
        {
            minggeSkillEquipPlaceList.Add(MGGuayuTypeConfig.Get(minggeItemTypeList[i]).EquipPlace);
@@ -77,17 +86,26 @@
    }
    private void OnBeforePlayerDataInitialize()
    private void OnBeforePlayerDataInitializeRelogin()
    {
        m_GanwuLV = 1;
        m_GanwuExp = 0;
        m_Lingying = 0;
        isStartAuto = false;
        isPauseAuto = false;
        qlNotNotify = false;
    }
    private void OnBeforePlayerDataInitialize()
    {
        waitTYOPPack = false;
    }
    void OnPlayerLoginOK()
    {
        InitAutoSet();
        UpdateRedPoint();
        redpointAuto.state = RedPointState.None;
    }
    private void OnEquipResult(HA814_tagMCMakeItemAnswer info)
@@ -96,7 +114,7 @@
            return;
        OnOPCallbackEvent?.Invoke(0);
    }
    void RefreshItemEvent(PackType type, int index, int itemID)
@@ -141,7 +159,7 @@
    public void UpdateMinggeInfo(HB132_tagSCMinggeInfo netPack)
    {
        var beforeLV= m_GanwuLV;
        var beforeLV = m_GanwuLV;
        m_GanwuLV = netPack.GanwuLV;
        m_GanwuExp = (int)netPack.GanwuExp;
        m_Lingying = (int)netPack.Lingying;
@@ -220,10 +238,23 @@
        }
        //自动处理: 判断分解 和战力高低 和决定是哪个方案下的装备对比
        int autoPreseetID;
        if (!AutoCalcMG(equip, out autoPreseetID))
        {
            return false;
        }
        //非自动情况下,默认当前方案
        equipShowPresetID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge);
        if (autoPreseetID == 0)
        {
            equipShowPresetID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge);
        }
        else
        {
            equipShowPresetID = autoPreseetID;
        }
        selectFloorEquip = equip;
        if (UIManager.Instance.IsOpened<MinggeWin>())
        {
@@ -236,6 +267,12 @@
            {
                UIManager.Instance.OpenWindow<MinggeEquipWin>();
            }
        }
        else
        {
            //打开界面 且外部提醒有需要处理的装备,在关闭界面的时候判断重置标识
            isPauseAuto = true;
            redpointAuto.state = RedPointState.Simple;
        }
        return true;
@@ -270,6 +307,22 @@
        var pack = new CB250_tagCSMinggeTuiyan();
        pack.Count = (byte)count;
        GameNetSystem.Instance.SendInfo(pack);
        if (isStartAuto && UIManager.Instance.IsOpened<MinggeWin>())
        {
            //显示特效
            var ui = UIManager.Instance.GetUI<MinggeWin>();
            ui.tyEffect.onComplete = null;
            ui.tyEffect.Play();
            if (autoSpeedUP)
            {
                ui.tyEffect.speedRate = autoTYCDs[0] / autoTYCDs[1];
            }
            else
            {
                ui.tyEffect.speedRate = 1;
            }
        }
    }
    public void SendChangeMingge(int selectMinggePresetID, int dropIndex, bool autodec)
@@ -325,7 +378,50 @@
    }
    public List<int> GetQLRate(int value)
    {
        var keys = MGLingyingQualityConfig.GetKeys();
        keys.Sort();
        int littleValue = 0;
        int bigValue = 0;
        for (int i = 0; i < keys.Count; i++)
        {
            var key = keys[i];
            if (value < key)
            {
                bigValue = key;
                littleValue = keys[i - 1];
                break;
            }
            else if (i == keys.Count - 1 && value >= key)
            {
                bigValue = key;
                littleValue = key;
            }
        }
        var littleRateList = MGLingyingQualityConfig.Get(littleValue).ItemColorWeightList;
        if (littleValue == bigValue)
        {
            return littleRateList.ToList();
        }
        var bigRateList = MGLingyingQualityConfig.Get(bigValue).ItemColorWeightList;
        //对比下一阶段的灵应值配置,比较同品质的权重差值与两个阶段的灵应差值求出每增加1点灵应对某个品质的权重变化值,变化值可能提升或者降低
        var rateList = new List<int>();
        for (int i = 0; i < littleRateList.Length; i++)
        {
            var littleRateValue = littleRateList[i];
            var bigRateValue = bigRateList[i];
            var diffRate = littleRateValue + (bigRateValue - littleRateValue) / (float)(bigValue - littleValue) * (value - littleValue);
            rateList.Add((int)diffRate);
        }
        return rateList;
    }
    #region 红点
@@ -333,7 +429,7 @@
    Redpoint redpointMG = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 1);
    Redpoint redpointPray = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 2);
    Redpoint redpointPreset = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 3);
    public Redpoint redpointAuto = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 4);
    void UpdateRedPoint()
    {
@@ -344,7 +440,7 @@
        {
            return;
        }
        if (PackManager.Instance.GetItemCountByID(PackType.Item, tyItemID) > 0)
        if (PackManager.Instance.GetItemCountByID(PackType.Item, tyItemID) > 0 && !isStartAuto)
        {
            redpointMG.state = RedPointState.Simple;
        }
@@ -360,4 +456,505 @@
    }
    #endregion
    #region 自动设置
    public int[] fightAttrIDList;
    public int[] deFightAttrIDList;
    public int[] autoCostCntList;
    public float[] autoTYCDs;    //秒
    public float autoTYTime;
    public int needOfficialRank;
    //公共部分
    public bool autoCostToggle
    {
        get
        {
            return LocalSave.GetBool($"MGCost_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGCost_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public int autoCostCount
    {
        get
        {
            return LocalSave.GetInt($"MGCostCnt_{PlayerDatas.Instance.baseData.PlayerID}", 1);
        }
        set
        {
            LocalSave.SetInt($"MGCostCnt_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public bool autoSpeedUP
    {
        get
        {
            return LocalSave.GetBool($"MGSpeedUP_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGSpeedUP_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public event Action ChangeAutoEvent;
    bool m_IsStartAuto;
    //是否开启自动
    public bool isStartAuto
    {
        get
        {
            return m_IsStartAuto;
        }
        private set
        {
            m_IsStartAuto = value;
            isPauseAuto = false;
            UpdateRedPoint();
            ChangeAutoEvent?.Invoke();
        }
    }
    public bool isPauseAuto;    //开启的情况下,因为某些原因暂停自动
    //每套方案各自的信息
    public List<MinggeAutoSet> autoSetList = new List<MinggeAutoSet>();
    public void InitAutoSet()
    {
        autoSetList.Clear();
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mingge))
        {
            return;
        }
        var maxCnt = PresetUnlockConfig.GetFuncPresetMaxCount((int)FuncPresetType.Mingge);
        for (int i = 1; i <= maxCnt; i++)
        {
            var autoSet = new MinggeAutoSet();
            autoSet.presetID = i;
            autoSetList.Add(autoSet);
        }
    }
    public MinggeAutoSet GetMGAutoSet(int presetID)
    {
        for (int i = 0; i < autoSetList.Count; i++)
        {
            if (autoSetList[i].presetID == presetID)
            {
                return autoSetList[i];
            }
        }
        return null;
    }
    //检查至少要有一个启动中
    public bool CanChangeStartToFalse(int presetID)
    {
        for (int i = 0; i < autoSetList.Count; i++)
        {
            if (autoSetList[i].presetID != presetID && autoSetList[i].startToggle)
            {
                return true;
            }
        }
        return false;
    }
    public void StartAuto(bool isStart)
    {
        if (isStart)
        {
            bool canStart = false;
            for (int i = 0; i < autoSetList.Count; i++)
            {
                if (autoSetList[i].startToggle)
                {
                    canStart = true;
                }
            }
            if (!canStart)
            {
                SysNotifyMgr.Instance.ShowTip("MinggeAuto2");
                isStartAuto = false;
                return;
            }
            if (!ItemLogicUtility.CheckItemCount(PackType.Item, tyItemID, autoCostCount, 2))
            {
                isStartAuto = false;
                return;
            }
        }
        UIManager.Instance.CloseWindow<MinggeAutoSetWin>();
        isStartAuto = isStart;
        if (isStartAuto)
        {
            //先处理装备一次,后续通过物品包自动处理
            CalcEquip();
        }
        else
        {
            SysNotifyMgr.Instance.ShowTip("MinggeAuto1");
        }
    }
    //自动处理装备,返回成功代表需要手动处理装备,其他情况一律返回false如分解 或防范
    bool AutoCalcMG(ItemModel mgEquip, out int autoPreseetID)
    {
        autoPreseetID = 0;
        if (mgEquip == null)
        {
            return false;
        }
        if (!isStartAuto)
            return true;
        //优先判断当前方案命格
        var curPresetID = FuncPresetManager.Instance.GetFuncPresetID((int)FuncPresetType.Mingge);
        var autoSet = GetMGAutoSet(curPresetID);
        if (!CanDecomposeMG(mgEquip, autoSet))
        {
            autoPreseetID = curPresetID;
            return true;
        }
        //判断其他方案
        for (int i = 0; i < autoSetList.Count; i++)
        {
            if (autoSetList[i].presetID == curPresetID)
            {
                continue;
            }
            if (!CanDecomposeMG(mgEquip, autoSetList[i]))
            {
                autoPreseetID = autoSetList[i].presetID;
                return true;
            }
        }
        SendDecompose(new byte[] { (byte)mgEquip.gridIndex });
        return false;
    }
    //单方案判断,未开启的也当作可分解,外层多套判断有一套需要就是需要穿戴
    bool CanDecomposeMG(ItemModel mgEquip, MinggeAutoSet autoSet)
    {
        if (!autoSet.startToggle)
        {
            return true;
        }
        if (mgEquip.config.ItemColor < autoSet.quanlity)
        {
            //品质不满足
            return true;
        }
        if (!autoSet.fightPowerToggle && !autoSet.fightAttrToggle && !autoSet.skillToggle)
        {
            //都不勾选
            return true;
        }
        //先判断技能,再判断属性 最后战力(比较消耗)
        //技能勾选的情况
        if (autoSet.skillToggle && !autoSet.fightPowerToggle && !autoSet.fightAttrToggle)
        {
            return !IsSkillOK(mgEquip, autoSet);
        }
        if (autoSet.skillToggle && autoSet.fightAttrToggle && !autoSet.fightPowerToggle)
        {
            if (autoSet.andOrSkillToggle == 1)
            {
                return !(IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet));
            }
            else
            {
                return !(IsSkillOK(mgEquip, autoSet) || IsFightAttrOK(mgEquip, autoSet));
            }
        }
        if (autoSet.skillToggle && autoSet.fightPowerToggle && !autoSet.fightAttrToggle)
        {
            if (autoSet.andOrSkillToggle == 1)
            {
                return !(IsSkillOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet));
            }
            else
            {
                return !(IsSkillOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet));
            }
        }
        if (autoSet.skillToggle && autoSet.fightPowerToggle && autoSet.fightAttrToggle)
        {
            if (autoSet.andOrSkillToggle == 1 && autoSet.andOrFPToggle == 1)
            {
                return !(IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet));
            }
            else if (autoSet.andOrSkillToggle == 1 && autoSet.andOrFPToggle == 2)
            {
                return !((IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet)) || IsFightPowerOK(mgEquip, autoSet));
            }
            else if (autoSet.andOrSkillToggle == 2 && autoSet.andOrFPToggle == 1)
            {
                return !((IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet)) || IsSkillOK(mgEquip, autoSet));
            }
            else
            {
                return !(IsSkillOK(mgEquip, autoSet) || IsFightAttrOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet));
            }
        }
        //属性勾选的情况
        if (autoSet.fightAttrToggle && !autoSet.fightPowerToggle)
        {
            return !IsFightAttrOK(mgEquip, autoSet);
        }
        if (autoSet.fightAttrToggle && autoSet.fightPowerToggle)
        {
            if (autoSet.andOrFPToggle == 1)
            {
                return !(IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet));
            }
            else
            {
                return !(IsFightAttrOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet));
            }
        }
        //战力勾选的情况
        if (autoSet.fightPowerToggle)
        {
            return !IsFightPowerOK(mgEquip, autoSet);
        }
        return false;
    }
    //技能是否满足条件
    bool IsSkillOK(ItemModel mgEquip, MinggeAutoSet autoSet)
    {
        var skillID = EquipModel.Instance.GetEquipSkillID(mgEquip);
        if (skillID == 0)
        {
            return false;
        }
        if (autoSet.skillID == 0)
        {
            //任意
            return true;
        }
        if (skillID != autoSet.skillID)
        {
            return false;
        }
        return true;
    }
    //属性是否满足条件
    bool IsFightAttrOK(ItemModel mgEquip, MinggeAutoSet autoSet)
    {
        var fightAttrs = EquipModel.Instance.GetEquipFightAttrs(mgEquip);
        // 如果指定了属性,则检查装备是否包含该属性
        bool deFightAttrOK = autoSet.deFightAttrID == 0 || fightAttrs.Contains(autoSet.deFightAttrID);
        bool fightAttrOK = autoSet.fightAttrID == 0 || fightAttrs.Contains(autoSet.fightAttrID);
        return deFightAttrOK && fightAttrOK;
    }
    bool IsFightPowerOK(ItemModel mgEquip, MinggeAutoSet autoSet)
    {
        long showFightPower = FightPowerManager.Instance.GetFightPowerMinggeChange(mgEquip, autoSet.presetID);
        if (showFightPower >= 0)
        {
            return true;
        }
        return false;
    }
    public void AutoTY()
    {
        //先处理装备,再推演
        // 每一套方案都要综合判断
        // if (CalcEquip())
        // {
        //     return;
        // }
        if (UIManager.Instance.IsOpened<MinggeEquipWin>())
        {
            return;
        }
        if (!PackManager.Instance.GetItems(PackType.MinggeDrop).IsNullOrEmpty())
        {
            return;
        }
        if (!ItemLogicUtility.CheckItemCount(PackType.Item, tyItemID, autoCostCount, 1))
        {
            isStartAuto = false;
            SysNotifyMgr.Instance.ShowTip("MinggeAuto1");
            return;
        }
        SendTY(autoCostCount);
        autoTYTime = Time.time;
    }
    void OnMSEvent()
    {
        if (isPauseAuto)
        {
            return;
        }
        if (!isStartAuto)
        {
            return;
        }
        if (Time.time - autoTYTime < autoTYCDs[autoSpeedUP ? 1 : 0])
        {
            return;
        }
        AutoTY();
    }
    #endregion
}
public class MinggeAutoSet
{
    public int presetID;
    public bool startToggle
    {
        get
        {
            return LocalSave.GetBool($"MGStart{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGStart{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public int quanlity
    {
        get
        {
            return LocalSave.GetInt($"MGQuanlity{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 1);
        }
        set
        {
            LocalSave.SetInt($"MGQuanlity{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public bool fightPowerToggle
    {
        get
        {
            return LocalSave.GetBool($"MGFightPower{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGFightPower{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    //0 都不勾选 1同时 2 或者
    public int andOrFPToggle
    {
        get
        {
            return LocalSave.GetInt($"MGAndOrFP{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0);
        }
        set
        {
            LocalSave.SetInt($"MGAndOrFP{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public bool fightAttrToggle
    {
        get
        {
            return LocalSave.GetBool($"MGFightAttr{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGFightAttr{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public int fightAttrID
    {
        get
        {
            return LocalSave.GetInt($"MGFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0);
        }
        set
        {
            LocalSave.SetInt($"MGFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public int deFightAttrID
    {
        get
        {
            return LocalSave.GetInt($"MGDeFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0);
        }
        set
        {
            LocalSave.SetInt($"MGDeFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public bool skillToggle
    {
        get
        {
            return LocalSave.GetBool($"MGSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false);
        }
        set
        {
            LocalSave.SetBool($"MGSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    public int skillID
    {
        get
        {
            return LocalSave.GetInt($"MGSkillID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0);
        }
        set
        {
            LocalSave.SetInt($"MGSkillID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
    //0 都不勾选 1同时 2 或者
    public int andOrSkillToggle
    {
        get
        {
            return LocalSave.GetInt($"MGAndOrSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0);
        }
        set
        {
            LocalSave.SetInt($"MGAndOrSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value);
        }
    }
}
Main/System/Mingge/MinggePrayWin.cs
@@ -60,8 +60,8 @@
    void DisplayPrayRate()
    {
        qlValueText.text = MinggeManager.Instance.m_Lingying.ToString();
        var littleRateList = GetRate(MinggeManager.Instance.m_Lingying);
        var bigRateList = GetRate(MinggeManager.Instance.m_Lingying + useCnt);
        var littleRateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying);
        var bigRateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying + useCnt);
        for (int i = 0; i < prayRateCells.Length; i++)
        {
@@ -109,49 +109,6 @@
    }
    public List<int> GetRate(int value)
    {
        var keys = MGLingyingQualityConfig.GetKeys();
        keys.Sort();
        int littleValue = 0;
        int bigValue = 0;
        for (int i = 0; i < keys.Count; i++)
        {
            var key = keys[i];
            if (value < key)
            {
                bigValue = key;
                littleValue = keys[i - 1];
                break;
            }
            else if (i == keys.Count - 1 && value >= key)
            {
                bigValue = key;
                littleValue = key;
            }
        }
        var littleRateList = MGLingyingQualityConfig.Get(littleValue).ItemColorWeightList;
        if (littleValue == bigValue)
        {
            return littleRateList.ToList();
        }
        var bigRateList = MGLingyingQualityConfig.Get(bigValue).ItemColorWeightList;
        //对比下一阶段的灵应值配置,比较同品质的权重差值与两个阶段的灵应差值求出每增加1点灵应对某个品质的权重变化值,变化值可能提升或者降低
        var rateList = new List<int>();
        for (int i = 0; i < littleRateList.Length; i++)
        {
            var littleRateValue = littleRateList[i];
            var bigRateValue = bigRateList[i];
            var diffRate = littleRateValue + (bigRateValue - littleRateValue) / (float)(bigValue - littleValue) * (value - littleValue);
            rateList.Add((int)diffRate);
        }
        return rateList;
    }
}
Main/System/Mingge/MinggeWin.cs
@@ -7,7 +7,7 @@
{
    [SerializeField] Button seeAttrBtn;
    [SerializeField] MinggeEquipCell[] equipCells;
    [SerializeField] UIEffectPlayer tyEffect;   //推演特效
    [SerializeField] public UIEffectPlayer tyEffect;   //推演特效
    [SerializeField] Image dropIcon;
    [SerializeField] Image dropSkillIcon;
    [SerializeField] MoneyMoveByPath moneyMoveByPathCell;     //掉落物金钱
@@ -49,7 +49,7 @@
            }
            AttributeManager.Instance.OpenMinggeSimpleAttributeWin(MinggeManager.Instance.minggeAttrDict, skillDict);
        });
        tyBtn.AddListener(SendTuiyan);
        tyBtn.AddListener(CheckTuiyan);
        for (int i = 0; i < suiteNameTexts.Length; i++)
        {
            int index = i;
@@ -78,6 +78,7 @@
        MinggeManager.Instance.OnMinggeInfoUpdate += OnMinggeInfoUpdate;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
        FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent;
        MinggeManager.Instance.ChangeAutoEvent += ChangeAutoEvent;
        lastLV = MinggeManager.Instance.m_GanwuLV;
        lastExp = MinggeManager.Instance.m_GanwuExp;
        Display();
@@ -92,7 +93,17 @@
        MinggeManager.Instance.OnMinggeInfoUpdate -= OnMinggeInfoUpdate;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
        FuncPresetManager.Instance.OnFuncPresetUseDataEvent -= OnFuncPresetUseDataEvent;
        MinggeManager.Instance.ChangeAutoEvent -= ChangeAutoEvent;
    }
    protected override void NextFrameAfterOpen()
    {
        if (MinggeManager.Instance.isPauseAuto)
        {
            MinggeManager.Instance.CalcEquip();
        }
    }
    void OnCloseWindow(UIBase win)
    {
@@ -112,6 +123,20 @@
        Display();
    }
    void ChangeAutoEvent()
    {
        if (MinggeManager.Instance.isStartAuto)
        {
            autoImg.SetActive(false);
            autoEffect.Play();
        }
        else
        {
            autoImg.SetActive(true);
            autoEffect.Stop();
        }
    }
    void Display()
    {
        DisplayMGGanwu();
@@ -123,6 +148,8 @@
        presetChooseCells.Display((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge);
        funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow());
        ChangeAutoEvent();
    }
    void RefreshItemEvent(PackType type, int index, int itemID)
    {
@@ -214,8 +241,43 @@
        moneyMoveByPathCell.PlayAnimation(MinggeManager.Instance.deitemID, 8, 2);
    }
    void CheckTuiyan()
    {
        if (!MinggeManager.Instance.qlNotNotify && PackManager.Instance.GetItemCountByID(PackType.Item, MinggeManager.Instance.qlItemID) > 0)
        {
            ConfirmCancel.ToggleConfirmCancel(
                Language.Get("L1003"),
                Language.Get("Mingge31"),
                Language.Get("TianziBillborad08"),
                Language.Get("Mingge35"),
                Language.Get("Mingge34"),
                (bool isOK, bool isToggle) =>
                {
                    if (isOK)
                    {
                        UIManager.Instance.OpenWindow<MinggePrayWin>();
                    }
                    else
                    {
                        SendTuiyan();
                    }
                    MinggeManager.Instance.qlNotNotify = isToggle;
                },
                false
            );
            return;
        }
        SendTuiyan();
    }
    void SendTuiyan()
    {
        if (MinggeManager.Instance.isStartAuto)
        {
            MinggeManager.Instance.StartAuto(false);
        }
        if (MinggeManager.Instance.CalcEquip())
        {
            return;
@@ -231,7 +293,12 @@
            return;
        }
        tyEffect.onComplete += () =>
        if (MinggeManager.Instance.isStartAuto)
        {
            MinggeManager.Instance.StartAuto(false);
        }
        tyEffect.speedRate = 1;
        tyEffect.onComplete = () =>
        {
            MinggeManager.Instance.SendTY(1);
        };
@@ -295,7 +362,16 @@
    void AutoTY()
    {
        if (InvestModel.Instance.IsInvested(InvestModel.monthCardType) ||
        PlayerDatas.Instance.baseData.realmLevel >= MinggeManager.Instance.needOfficialRank)
        {
            UIManager.Instance.OpenWindow<MinggeAutoSetWin>();
        }
        else
        {
            SysNotifyMgr.Instance.ShowTip("MinggeAuto6", RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel).Name);
            UIManager.Instance.OpenWindow<PrivilegeCardWin>();
        }
    }
}
Main/System/PhantasmPavilion/PhantasmPavilionManager.cs
@@ -84,6 +84,8 @@
    {
        if (type != PackType.Item)
            return;
        if (itemID <= 0)
            return;
        if (ItemConfig.Get(itemID).Type != 146)
            return;
        UpdateRedPoint();
Main/System/WarlordPavilion/WarlordPavilionManager.cs
@@ -346,6 +346,8 @@
            foreach (var config in FBDJGEffectConfig.GetValues())
            {
                int attrId = config.AttrID;
                if (config.RandWeight == 0)
                    continue;
                if (!attrIds.Contains(attrId))
                {
                    attrIds.Add(attrId);