yyl
2025-12-09 bddf4df7cbb292011a974b705d6f6d94c0ac6cc1
Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
22个文件已修改
32个文件已添加
1600 ■■■■■ 已修改文件
Main/Component/UI/Common/FuncOpen.cs 179 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/FuncOpenLVConfig.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/StoreConfig.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Main.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BillboardRank/PlayerRankCell.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BillboardRank/PlayerRankWin.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BillboardRank/PlayerTop3Cell.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BillboardRank/RankModel.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FirstCharge/FirstChargeWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FunctionPreview.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FunctionPreview/FunctionPreviewCell.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FunctionPreview/FunctionPreviewCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FunctionPreview/FunctionPreviewWin.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/FunctionPreview/FunctionPreviewWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GeneralConfig/DayRemind.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Hero/HeroManager.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroCardCell.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroListWin.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.Reborn.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/HomeWin.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/RightFuncInHome.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/MainLevel/MainBossEnterWin.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSActivityManager.cs 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSActivityManager.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSHeroCallBaseWin.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSHeroCallBaseWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSMainLevelBaseWin.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSMainLevelBaseWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallAwardCell.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallAwardWin.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallGiftCell.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallGiftWin.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankMainLeveAwardCell.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankMainLeveAwardWin.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankWin.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSRankWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Store/StoreModel.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Common/FuncOpen.cs
@@ -1,8 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.Linq;
public class FuncOpen
{
@@ -109,6 +109,10 @@
                funcOpenState[funcState.FuncID] = funcState.State == 1;
                bAfterFuncIsOpen = funcOpenState[funcState.FuncID];
            }
            awardStateDict[funcState.FuncID] = funcState.AwardState == 1;
            UpdatePreviewRedpoint();
            if (OnFuncStateChangeEvent != null)
            {
                OnFuncStateChangeEvent(funcState.FuncID);
@@ -225,48 +229,6 @@
        }
    }
    public string GetErrorTip(int key)
    {
        if (!FuncOpenLVConfig.HasKey(key))
            return string.Empty;
        FuncOpenLVConfig config = FuncOpenLVConfig.Get(key);
        if (!IsFuncOpen(key, out int errorCode))
        {
            switch (errorCode)
            {
                case 1:
                    return Language.Get("FuncLimit_Level", config.LimitLV);
                case 2:
                    //开服多少天 一般是组合
                    if (config.LimitLV != 0)
                    {
                        return Language.Get("FuncLimit_OpenDay_LV", config.LimitLV, TimeUtility.OpenDay + 1, config.OpenDay);
                    }
                    else if (config.LimitMissionID != 0)
                    {
                        return Language.Get("FuncLimit_OpenDay_Mission", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID), TimeUtility.OpenDay + 1, config.OpenDay);
                    }
                    else if (config.LimiRealmLV != 0)
                    {
                        return Language.Get("FuncLimit_OpenDay_Realm", RealmConfig.Get(config.LimiRealmLV).Name, TimeUtility.OpenDay + 1, config.OpenDay);
                    }
                    else
                    {
                        return Language.Get("FuncLimit_OpenDay", config.OpenDay);
                    }
                case 3:
                    return Language.Get("FuncLimit_Realm", RealmConfig.Get(config.LimiRealmLV).Name);
                case 4:
                    return Language.Get("FuncLimit_Mission", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID));
                case 5:
                    return Language.Get("FuncLimit_ManLevel", config.ManLevel/10000, config.ManLevel/100%100, config.ManLevel%100);
            }
        }
        return string.Empty;
    }
    public int GetLimitLv(int key)
    {
        // FuncOpenLVConfig tagFuncOpenLVModel = FuncOpenLVConfig.Get(key);
@@ -300,6 +262,137 @@
        }
        return true;
    }
    #region 功能预告
    Dictionary<int, bool> awardStateDict = new Dictionary<int, bool>();
    Dictionary<int, int> funcIndexDict = new Dictionary<int, int>();
    public Dictionary<int, int> GetFuncIndexDict()
    {
        if (funcIndexDict.IsNullOrEmpty())
        {
            foreach (var funcId in FuncOpenLVConfig.GetKeys())
            {
                FuncOpenLVConfig config = FuncOpenLVConfig.Get(funcId);
                if (config.PreviewIndex > 0)
                {
                    funcIndexDict[config.FuncId] = config.PreviewIndex;
                }
            }
        }
        return funcIndexDict;
    }
    public List<int> GetSortShowList()
    {
        List<int> sortShowList = new List<int>();
        Dictionary<int, int> indexDict = GetFuncIndexDict();
        // 按状态优先级排序:状态1(可领取)> 状态0(未解锁)> 状态2(已领取)
        // 每种状态内按 PreviewIndex 升序,相同则按 FuncId 升序
        sortShowList = indexDict
            .Select(kv => new { FuncId = kv.Key, PreviewIndex = kv.Value, State = GetState(kv.Key) })
                .OrderBy(x => x.State == 1 ? 0 : (x.State == 0 ? 1 : 2)) // 映射优先级:1→0, 0→1, 2→2
                .ThenBy(x => x.PreviewIndex)
                .ThenBy(x => x.FuncId)
                .Select(x => x.FuncId)
                .ToList();
        return sortShowList;
    }
    //第一个可领取的物品所在行索引
    public bool TryGetJumpIndex(out int index)
    {
        index = 0;
        List<int> list = GetSortShowList();
        if (list.IsNullOrEmpty())
            return false;
        for (int i = 0; i < list.Count; i++)
        {
            if (GetState(list[i]) == 1)
            {
                index = i;
                return true;
            }
        }
        return false;
    }
    private bool IsAwardHave(int funcId)
    {
        return !awardStateDict.TryGetValue(funcId, out bool state) ? false : state;
    }
    // 0-未解锁 1-可领取 2-已领取
    public int GetState(int funcId)
    {
        if (IsAwardHave(funcId))
            return 2;
        return IsFuncOpen(funcId) ? 1 : 0;
    }
    public string GetErrorStr(int funcId)
    {
        if (!FuncOpenLVConfig.HasKey(funcId))
            return string.Empty;
        FuncOpenLVConfig config = FuncOpenLVConfig.Get(funcId);
        List<string> conditionStrs = new List<string>();
        if (config.LimitLV > 0)
        {
            conditionStrs.Add(Language.Get("FunctionPreviewErr01", config.LimitLV));
        }
        if (config.LimiRealmLV > 0)
        {
            conditionStrs.Add(Language.Get("FunctionPreviewErr02", RealmConfig.Get(config.LimiRealmLV).Name));
        }
        if (config.LimitMissionID > 0)
        {
            conditionStrs.Add(Language.Get("FunctionPreviewErr03", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID)));
        }
        if (config.OpenDay > 0)
        {
            conditionStrs.Add(Language.Get("FunctionPreviewErr04", config.OpenDay));
        }
        if (config.ManLevel > 0)
        {
            conditionStrs.Add(Language.Get("FunctionPreviewErr05", config.ManLevel / 10000, config.ManLevel / 100 % 100, config.ManLevel % 100));
        }
        if (conditionStrs.Count == 0)
        {
            return string.Empty;
        }
        string connector = Language.Get("FunctionPreview01"); // "且"
        string unlockStr = Language.Get("FunctionPreview02"); // "解锁"
        string result = string.Join(connector, conditionStrs) + unlockStr;
        return result;
    }
    public void SendGetAward(int funcId)
    {
        var pack = new CA504_tagCMPlayerGetReward();
        pack.RewardType = 17;
        pack.DataEx = (uint)funcId;
        GameNetSystem.Instance.SendInfo(pack);
    }
    Redpoint redpoint = new Redpoint(MainRedDot.RightFuncRedpoint, MainRedDot.FunctionPreviewRepoint);
    public void UpdatePreviewRedpoint()
    {
        redpoint.state = RedPointState.None;
        if (!TryGetJumpIndex(out int index))
            return;
        redpoint.state = RedPointState.Simple;
    }
    #endregion
}
public interface ICheckFuncOpen
Main/Config/Configs/FuncOpenLVConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           Thursday, November 27, 2025
//    [  Date ]:           2025年12月8日
//--------------------------------------------------------
using System.Collections.Generic;
@@ -25,7 +25,8 @@
    public string Name;
    public string Desc;
    public string Icon;
    public Dictionary<int, int[][]> Award;
    public int PreviewIndex;
    public int[][] AwardList;
    public override int LoadKey(string _key)
    {
@@ -55,7 +56,9 @@
            Icon = tables[8];
            Award = ConfigParse.ParseIntArray2Dict(tables[9].Replace("(", "[").Replace(")", "]"));
            int.TryParse(tables[9],out PreviewIndex);
            AwardList = JsonMapper.ToObject<int[][]>(tables[10].Replace("(", "[").Replace(")", "]"));
        }
        catch (Exception exception)
        {
Main/Config/Configs/StoreConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2025年10月28日
//    [  Date ]:           2025年12月8日
//--------------------------------------------------------
using System.Collections.Generic;
@@ -29,6 +29,7 @@
    public int MoneyOriginal;
    public int UnlockType;
    public int UnlockValue;
    public string Name;
    public override int LoadKey(string _key)
    {
@@ -65,6 +66,8 @@
            int.TryParse(tables[11],out UnlockType); 
            int.TryParse(tables[12],out UnlockValue); 
            Name = tables[13];
        }
        catch (Exception exception)
        {
Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -7,7 +7,7 @@
    public static event Action beforePlayerDataInitializeEvent; //重登切换账号 或者 短暂的断线重连 都会触发
    public static event Action beforePlayerDataInitializeEventOnRelogin;    //重登切换账号触发
    public static event Action beforePlayerDataInitializeEventOnReconnect;    //断线重连触发
    public static event Action beforePlayerDataInitializeEventOnReconnect;    //同账号断线重连触发
    public static event Action afterPlayerDataInitializeEvent;
    public static event Action switchAccountEvent;
    public static bool isAfterPlayerDataInitialize = false; //可区分断线重连还是完全重登; 切到登录场景会重置为false,故可判断断线重连
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6941d0f549d09534083b125a3f958bf6
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs
New file
@@ -0,0 +1,11 @@
using UnityEngine;
using System.Collections;
// AB 05 开服庆典信息 #tagSCOSACelebrationInfo
public class DTCAB05_tagSCOSACelebrationInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HAB05_tagSCOSACelebrationInfo vNetData = vNetPack as HAB05_tagSCOSACelebrationInfo;
    }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dde0a532fce9aff41bd468e6a0b87511
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 87a175e0ef9386646a517dc77118c1ca
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs
New file
@@ -0,0 +1,19 @@
using UnityEngine;
using System.Collections;
// AB 05 开服庆典信息 #tagSCOSACelebrationInfo
public class HAB05_tagSCOSACelebrationInfo : GameNetPackBasic {
    public uint PointTotal;    // 累计庆典积分
    public uint PointAward;    // 积分阶段奖励记录,按阶段积分排序后索引二进制存储是否已领取
    public HAB05_tagSCOSACelebrationInfo () {
        _cmd = (ushort)0xAB05;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out PointTotal, vBytes, NetDataType.DWORD);
        TransBytes (out PointAward, vBytes, NetDataType.DWORD);
    }
}
Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4b88c80b8a2f30e429deefeacba13d72
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Main.cs
@@ -93,6 +93,7 @@
        managers.Add(FuncNPCManager.Instance);
        managers.Add(GuildBossManager.Instance);
        managers.Add(LineupRecommendManager.Instance);
        managers.Add(OSActivityManager.Instance);
        foreach (var manager in managers)
        {
Main/System/BillboardRank/PlayerRankCell.cs
@@ -8,16 +8,15 @@
//玩家通用排名
public class PlayerRankCell : MonoBehaviour
{
    [SerializeField] AvatarCell avatarCell;
    [SerializeField] AvatarCell avatarCell; // 头像中点击查询玩家详情
    [SerializeField] Text rankText;
    [SerializeField] Text rankValueText;    //排名比较内容
    [SerializeField] Text nameText;
    [SerializeField] OfficialTitleCell officialTitleCell;
    [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情
    // rank 为0 代表玩家自己
    public void Display(int rankType, int rank, string valueFormat)
    public void Display(int rankType, int rank)
    {
        RankData rankData = null;
        if (rank != 0)
@@ -34,7 +33,7 @@
                                                PlayerDatas.Instance.baseData.face,
                                                PlayerDatas.Instance.baseData.facePic));
                rankText.text = Language.Get("L1045");
                rankValueText.text = "1-1";//Language.Get("L1125");
                rankValueText.text = "";//Language.Get("L1125");
                nameText.text = PlayerDatas.Instance.baseData.PlayerName;
                officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
                return;
@@ -46,7 +45,7 @@
            officialTitleCell.SetActive(false);
            avatarCell.SetActive(false);
            nameText.text = Language.Get("L1124");
            rankValueText.text = "1-1";//Language.Get("L1125");
            rankValueText.text = "";//Language.Get("L1125");
        }
        else
        {
@@ -55,17 +54,11 @@
            avatarCell.SetActive(true);
            avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)rankData.id, (int)rankData.value3, (int)rankData.value4));
            nameText.text = rankData.name1;
            rankValueText.text = RankModel.Instance.GetStoryInfo(rankData.cmpValue); ;
            rankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
        }
        rankText.text = rank.ToString();
        if (queryPlayerBtn != null)
        {
            queryPlayerBtn.AddListener(() =>
            {
            });
        }
    }
}
Main/System/BillboardRank/PlayerRankWin.cs
@@ -9,7 +9,7 @@
using UnityEngine.UI;
//通用玩家个人排行榜
//通用玩家个人排行榜; cell数量是固定的 非动态变化
public class PlayerRankWin : UIBase
{
    [SerializeField] List<PlayerTop3Cell> playerTop3Cells;
@@ -18,26 +18,23 @@
    [SerializeField] PlayerRankCell myRankCell;
    [SerializeField] Button btnClose;
    [HideInInspector] public int rankType;
    [HideInInspector] public string valueFormat = "{0}";
    //数据后续从manager中记录获取
    [HideInInspector] public int groupValue1 = 0;   //一般用于跨服
    [HideInInspector] public int groupValue2 = 0;   //一般用于跨服
    protected int rankType; //从functionOrder获取
    protected override void InitComponent()
    {
        btnClose.AddListener(()=>
        {
            CloseWindow();
        });
        btnClose?.AddListener(CloseWindow);
    }
    protected override void NextFrameAfterOpen()
    protected override void OnPreOpen()
    {
        rankType = functionOrder;
        RankModel.Instance.onRankRefresh += OnRankRefresh;
        scrollerController.OnRefreshCell += OnRefreshCell;
        Refresh();
    }
    protected override void OnPreClose()
@@ -53,7 +50,7 @@
    public override void Refresh()
    {
        cmpStrText.text = Language.Get("RankTypeName_1");
        cmpStrText.text = RankModel.Instance.GetCmpTabStr(rankType);
        ShowTop3();
        CreateScroller();
        ShowMyRank();
@@ -73,7 +70,7 @@
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<PlayerRankCell>();
        _cell.Display(rankType, cell.index + 1, valueFormat);
        _cell.Display(rankType, cell.index + 1);
        RankModel.Instance.ListenRankPage(rankType, cell.index, groupValue1, groupValue2);
    }
@@ -82,13 +79,13 @@
    { 
        for (int i = 0; i < playerTop3Cells.Count; i++)
        {
            playerTop3Cells[i].Display(functionOrder, i + 1);
            playerTop3Cells[i].Display(rankType, i + 1);
        }
    }
    void ShowMyRank()
    {
        myRankCell.Display(rankType, 0, valueFormat);
        myRankCell.Display(rankType, 0);
    }
Main/System/BillboardRank/PlayerTop3Cell.cs
@@ -8,26 +8,24 @@
//玩家通用的前3排名
public class PlayerTop3Cell : MonoBehaviour
{
    //[SerializeField] Model 显示NPC 武将模型
    [SerializeField] Text rankValueText;    //排名比较内容
    [SerializeField] Text nameText;
    [SerializeField] OfficialTitleCell officialTitleCell;
    [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情
    [SerializeField] HorseController model;
    public void Display(int rankType, int rank, string valueFormat = "{0}")
    public void Display(int rankType, int rank)
    {
        var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank);
        if (rankData == null)
        {
            rankValueText.text = "1-1";//Language.Get("L1125");
            rankValueText.text = "";//Language.Get("L1125");
            nameText.text = Language.Get("L1124");
            officialTitleCell.SetActive(false);
            return;
        }
        officialTitleCell.SetActive(true);
        //rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue2 + rankData.cmpValue * Constants.ExpPointValue));
        rankValueText.text = RankModel.Instance.GetStoryInfo(rankData.cmpValue);
        rankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue);
        nameText.text = rankData.name1;
        officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
        model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1);
Main/System/BillboardRank/RankModel.cs
@@ -333,13 +333,36 @@
    }
    #endregion
    public string GetStoryInfo(uint cmpValue)
    //获取排名比较值字符串
    public string GetCmpValueStr(int rankType, uint cmpValue)
    {
        switch (rankType)
        {
            case 0:
            case 3:
        int value = (int)cmpValue;
        if (!MainLevelConfig.HasKey(value))
            return string.Empty;
        MainLevelConfig config = MainLevelConfig.Get(value);
        return Language.Get("Arena15", config.ChapterID, config.LevelNum);
            case 4:
                return cmpValue.ToString();
        }
        return string.Empty;
    }
    //获取排名标签
    public string GetCmpTabStr(int rankType)
    {
        switch (rankType)
        {
            case 0:
            case 3:
                return Language.Get("RankTypeName_1");
            case 4:
                return Language.Get("OSActivity5");
        }
        return string.Empty;
    }
}
Main/System/FirstCharge/FirstChargeWin.cs
@@ -256,7 +256,7 @@
            OrderInfoConfig orderInfoConfig;
            if (model.TryGetOrderInfoConfigByFirstID(firstID, out orderInfoConfig))
            {
                txtTabTitles[i].text = Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNum);
                txtTabTitles[i].text = Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNumOnSale);
            }
        }
    }
@@ -279,7 +279,7 @@
        bool isBuy = firstChargeData.IsBuy();
        btnBuy.SetActive(!isBuy);
        btnHave.SetActive(isBuy);
        txtBuy.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNum);
        txtBuy.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNumOnSale);
        //领取
        int day = firstChargeData.GetNowBuyDay();
        //0: 已领取 1: 不可领取 2: 可领取 
Main/System/FunctionPreview.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e7acf37249ff26f4f85a11d0e3e8f65a
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/FunctionPreview/FunctionPreviewCell.cs
New file
@@ -0,0 +1,53 @@
using UnityEngine;
public class FunctionPreviewCell : MonoBehaviour
{
    [SerializeField] ImageEx imgIcon;
    [SerializeField] TextEx txtName;
    [SerializeField] TextEx txtDesc;
    [SerializeField] ItemCell itemCell;
    [SerializeField] Transform transItemCellMask;
    [SerializeField] ImageEx imgRed;
    [SerializeField] Transform transOpenInfo;
    [SerializeField] RichText txtOpenInfo;
    [SerializeField] Transform transMask;
    public void Display(int index, CellView cell)
    {
        int funcId = cell.info.Value.infoInt1;
        if (!FuncOpenLVConfig.HasKey(funcId))
            return;
        FuncOpenLVConfig config = FuncOpenLVConfig.Get(funcId);
        // 0-未解锁 1-可领取 2-已领取
        int state = FuncOpen.Instance.GetState(funcId);
        imgRed.SetActive(state == 1);
        transOpenInfo.SetActive(state == 0);
        transMask.SetActive(state != 1);
        transItemCellMask.SetActive(state == 2);
        imgIcon.SetSprite(config.Icon);
        imgIcon.SetNativeSize();
        txtName.text = config.Name;
        txtDesc.text = config.Desc;
        int[][] awardList = config.AwardList;
        itemCell.SetActive(!awardList.IsNullOrEmpty() && state != 0);
        if (!awardList.IsNullOrEmpty())
        {
            itemCell.Init(new ItemCellModel(awardList[0][0], true, awardList[0][1]));
            itemCell.button.SetListener(() =>
            {
                if (state == 1)
                {
                    FuncOpen.Instance.SendGetAward(funcId);
                }
                else
                {
                    ItemTipUtility.Show(awardList[0][0]);
                }
            });
        }
        txtOpenInfo.text = FuncOpen.Instance.GetErrorStr(funcId);
    }
}
Main/System/FunctionPreview/FunctionPreviewCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 807ec470632e30e4fbebaad0c81ba631
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/FunctionPreview/FunctionPreviewWin.cs
New file
@@ -0,0 +1,48 @@
using UnityEngine;
public class FunctionPreviewWin : UIBase
{
    [SerializeField] ScrollerController scroller;
    protected override void OnPreOpen()
    {
        scroller.lockType = EnhanceLockType.KeepVertical;
        scroller.OnRefreshCell += OnRefreshCell;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        CreateScoller();
    }
    protected override void OnPreClose()
    {
        scroller.OnRefreshCell -= OnRefreshCell;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
    }
    private void OnFuncStateChangeEvent(int obj)
    {
        CreateScoller();
    }
    private void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<FunctionPreviewCell>();
        _cell?.Display(cell.index, cell);
    }
    private void CreateScoller()
    {
        scroller.Refresh();
        var list = FuncOpen.Instance.GetSortShowList();
        if (!list.IsNullOrEmpty())
        {
            for (int i = 0; i < list.Count; i++)
            {
                CellInfo info = new CellInfo();
                info.infoInt1 = list[i];
                scroller.AddCell(ScrollerDataType.Header, i, info);
            }
        }
        scroller.Restart();
    }
}
Main/System/FunctionPreview/FunctionPreviewWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e7c6142d362c8194c9cbe93b1d76f904
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/GeneralConfig/DayRemind.cs
@@ -33,6 +33,7 @@
    }
    public const string DJQTip = "DJQTip"; // 代金券提示
    public const string OSMainLevel = "OSMainLevel"; // 开服主线关卡活动提示
    public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
@@ -74,6 +75,7 @@
    private void GetPlayerDayRemind()
    {
        SetDayRemind(DJQTip);
        SetDayRemind(OSMainLevel);
    }
    public void SetDayRemind(string _key)
Main/System/Hero/HeroManager.cs
@@ -83,6 +83,11 @@
        return heroInfoDict.Values.ToList();
    }
    public List<string> GetHeroGuidList()
    {
        return heroInfoDict.Keys.ToList();
    }
    /// 参数: 职业,国家,伤害类型,6大战斗属性,特殊属性
    public List<string> GetHeroGuidList(List<int> selectList = null)
    {
Main/System/HeroUI/HeroCardCell.cs
@@ -14,6 +14,7 @@
    [SerializeField] RedpointBehaviour redpoint;
    [SerializeField] Image newImage;    //新标识和红点互斥
    [SerializeField] Image trainStateImg;
    [SerializeField] Image starRedImg;
    [SerializeField] Text nameText;
    [SerializeField] Image awakeImg;
    [SerializeField] Text awakeLVText;
@@ -62,6 +63,9 @@
        {
            trainStateImg.SetActive(false);
        }
        starRedImg.SetActive(funcState == 2);
        nameText.text = hero.breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv", heroConfig.Name, hero.breakLevel);
        awakeImg.SetActive(hero.awakeLevel > 0);
        awakeLVText.text = hero.awakeLevel.ToString();
Main/System/HeroUI/HeroListWin.cs
@@ -160,6 +160,7 @@
        HeroUIManager.Instance.SortHeroList();
        RefreshEmptyTip();
        CreateScroller();
        heroListScroller.JumpIndex(0);
    }
    //上阵加成
@@ -227,6 +228,8 @@
            }
        }
        heroListScroller.Restart();
        heroListScroller.lockType = EnhanceLockType.KeepVertical;
    }
    int GetAttrActiveHeroCount()
Main/System/HeroUI/HeroUIManager.Reborn.cs
@@ -100,9 +100,76 @@
    }
    //遣散获取符合条件的武将列表
    /// 参数: 职业,国家,伤害类型,6大战斗属性,特殊属性
    public List<string> GetHeroGuidListDelectFunc(List<int> selectList = null)
    {
        var _list = HeroManager.Instance.GetHeroList();
        if (selectList.IsNullOrEmpty())
            return HeroManager.Instance.GetHeroGuidList();
        int job = selectList[0];
        int country = selectList[1];
        int hurtType = selectList[2];
        int fightAttrType = selectList[3];
        int specialAttrType = selectList[4];
        List<string> retGuidList = new List<string>();
        foreach (var heroInfo in _list)
        {
            if (heroInfo.isAttrActive)
                continue;
            if (heroInfo.heroStar < heroInfo.GetCurMaxStar())
            {
                continue;
            }
            //0代表全部, 同级别是可复选,不同级别为且的关系
            bool isMatch = true;
            if (job != 0)
            {
                isMatch = isMatch && (job & (1 << heroInfo.heroConfig.Class)) > 0;
            }
            if (country != 0)
            {
                isMatch = isMatch && (country & (1 << heroInfo.heroConfig.Country)) > 0;
            }
            if (hurtType != 0)
            {
                isMatch = isMatch && (hurtType & (1 << heroInfo.heroConfig.HurtType)) > 0;
            }
            if (fightAttrType != 0)
            {
                isMatch = isMatch && (fightAttrType & (1 << heroInfo.heroConfig.Specialty)) > 0;
            }
            if (specialAttrType != 0)
            {
                bool isMatch2 = false;
                for (int i = 0; i < heroInfo.heroConfig.Specialty2.Length; i++)
                {
                    isMatch2 = (specialAttrType & (1 << heroInfo.heroConfig.Specialty2[i])) > 0;
                    if (isMatch2)
                        break;
                }
                isMatch = isMatch && isMatch2;
            }
            if (isMatch)
            {
                retGuidList.Add(heroInfo.itemHero.guid);
            }
        }
        return retGuidList;
    }
    public void SortHeroDeleteList()
    {
        heroDeleteSortList = HeroManager.Instance.GetHeroGuidList(selectHeroDeleteList);
        heroDeleteSortList = GetHeroGuidListDelectFunc(selectHeroDeleteList);
        heroDeleteSortList.Sort(CmpDeleteHero);
    }
Main/System/HeroUI/HeroUIManager.cs
@@ -467,12 +467,19 @@
    // 主线上阵武将才需要提醒  觉醒>升星>突破>升级
    public int GetFuncState(HeroInfo hero)
    {
        if (!hero.isAttrActive)
            return 0;
        var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId);
        if (!hero.IsInTeamByTeamType(TeamType.Story))
        {
            if (hero.heroStar < hero.GetCurMaxStar() && heroCnt > 1)
            {
                return 2;
            }
            return 0;
        }
        var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId);
        var itemPack = PackManager.Instance.GetSinglePack(PackType.Item);
        //5星后才能觉醒
        if (hero.heroStar < starLevelCanAwake)
@@ -493,7 +500,10 @@
            }
        }
        if (heroCnt > 1) return 2;
        if (hero.heroStar < hero.GetCurMaxStar() && heroCnt > 1)
        {
            return 2;
        }
        var maxBreakLV = HeroBreakConfig.GetMaxBreakLv(hero.heroId);
        if (hero.breakLevel < maxBreakLV)
@@ -526,6 +536,8 @@
    List<Redpoint> heroOnTeamRedpointList = new List<Redpoint>();   //上阵的武将红点
    List<Redpoint> heroBookRedpointList = new List<Redpoint>(); //图鉴所有武将红点
    //生效未上阵的 可吞噬的共用一个红点
    Redpoint heroEatRedPoint = new Redpoint(MainRedDot.HeroCardRedpoint, MainRedDot.HeroCardRedpoint * 10 + 8);
    //新标识的红点 所有武将统一个
    Redpoint newMarkRedPoint = new Redpoint(MainRedDot.HeroCardRedpoint, MainRedDot.HeroCardRedpoint * 10 + 9);
    void InitHeroOnTeamRedpointList()
@@ -566,6 +578,27 @@
        }
        newMarkRedPoint.state = newHeroIDList.Count > 0 ? RedPointState.New : RedPointState.None;
        heroEatRedPoint.state = RedPointState.None;
        var _list = HeroManager.Instance.GetHeroList();
        foreach (var hero in _list)
        {
            if (!hero.isAttrActive)
            {
                continue;
            }
            if (hero.heroStar >= hero.GetCurMaxStar())
            {
                continue;
            }
            if (HeroManager.Instance.GetHeroCountByID(hero.heroId) > 1)
            {
                heroEatRedPoint.state = RedPointState.Simple;
                break;
            }
        }
    }
Main/System/Main/HomeWin.cs
@@ -61,6 +61,8 @@
    [SerializeField] RightFuncInHome rightFuncInHome;
    [SerializeField] Button FirstChargeBtn;
    [SerializeField] Button osMainLevelBtn;
    [SerializeField] Button osHeroCallBtn;
    //坐骑
    [SerializeField] Image horseBGImg;
@@ -187,6 +189,15 @@
            UpdateSendButton();
            inputFastChat.text = string.Empty;
        });
        osMainLevelBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<OSMainLevelBaseWin>();
        });
        osHeroCallBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<OSHeroCallBaseWin>();
        });
    }
@@ -234,8 +245,10 @@
        HorseManager.Instance.OnHorseUpdateEvent += DisplayHorse;
        ChatManager.Instance.OnChatTabChangeEvent += OnChatTabChangeEvent;
        GuildManager.Instance.EnterOrQuitGuildEvent += EnterOrQuitGuildEvent;
        TimeMgr.Instance.OnDayEvent += OnDayEvent;
        Display();
        DisplayFirstChargeBtn();
        DisplayOSActivity();
        // var battleWin = UIManager.Instance.OpenWindow<BattleWin>();
        // battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
@@ -264,6 +277,7 @@
        HorseManager.Instance.OnHorseUpdateEvent -= DisplayHorse;
        ChatManager.Instance.OnChatTabChangeEvent -= OnChatTabChangeEvent;
        GuildManager.Instance.EnterOrQuitGuildEvent -= EnterOrQuitGuildEvent;
        TimeMgr.Instance.OnDayEvent -= OnDayEvent;
        //  关闭的时候把战斗界面也给关了 虽然是在外面开的
        UIManager.Instance.CloseWindow<BattleWin>();
@@ -277,6 +291,7 @@
        txtFastChatSend.text = isCanSend ? Language.Get("Chat11") : Language.Get("Chat14", remainingSeconds);
        txtFastChatSend.colorType = isCanSend ? TextColType.NavyBrown : TextColType.LightWhite;
    }
    private void EnterOrQuitGuildEvent(bool obj)
@@ -319,11 +334,10 @@
    async UniTask DelayPlayMusic()
    {
        await UniTask.Delay(2000);
        await UniTask.Delay(1200);
        if (!SoundPlayer.Instance.IsPlayBackGroundMuisic())
            SoundPlayer.Instance.PlayBackGroundMusic(38);
    }
    private void OnClickEnterBoss()
@@ -597,6 +611,10 @@
        }
    }
    private void OnFirstChargeTaskUpdateEvent()
    {
        DisplayFirstChargeBtn();
@@ -611,6 +629,10 @@
        else if (funcId == (int)FuncOpenEnum.Horse)
        {
            DisplayHorse();
        }
        else if (funcId == (int)FuncOpenEnum.OSMainLevl || funcId == (int)FuncOpenEnum.OSHeroCall)
        {
            DisplayOSActivity();
        }
    }
@@ -654,4 +676,17 @@
            UIManager.Instance.OpenWindow<HorseWin>();
        }
    }
    void DisplayOSActivity()
    {
        osMainLevelBtn.SetActive(OSActivityManager.Instance.IsOpened(3));
        osHeroCallBtn.SetActive(OSActivityManager.Instance.IsOpened(4));
}
    void OnDayEvent()
    {
        DisplayOSActivity();
    }
}
Main/System/Main/RightFuncInHome.cs
@@ -17,6 +17,7 @@
    [SerializeField] Button battlePassBtn;
    [SerializeField] Button llmjBtn; //历练秘笈
    [SerializeField] Button signBtn;
    [SerializeField] Button previewBtn;
    static string listenWindowName = "";   //监听关闭时再显示
@@ -79,6 +80,13 @@
            ListenWindow("SignWin");
            UIManager.Instance.OpenWindow<SignWin>();
        });
        previewBtn.AddListener(() =>
        {
            //用于监听界面,打开时缩进右边功能栏,关闭时显示
            ListenWindow("FunctionPreviewWin");
            UIManager.Instance.OpenWindow<FunctionPreviewWin>();
        });
    }
    void ShowBtns()
@@ -89,6 +97,7 @@
        llmjBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.LLMJ));
        signBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DaySign));
        monthCardBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.PrivilegeCard));
        previewBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FunctionPreview));
    }
Main/System/MainLevel/MainBossEnterWin.cs
@@ -34,8 +34,7 @@
        {
            RankModel.Instance.ResetQueryParam();
            RankModel.Instance.QueryRankByPage(0, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
            var win = UIManager.Instance.OpenWindow<PlayerRankWin>();
            win.rankType = 0;
            UIManager.Instance.OpenWindow<PlayerRankWin>(0);
        });
Main/System/OSActivity.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c825c294184518b419d9d9fc80996f01
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSActivityManager.cs
New file
@@ -0,0 +1,190 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class OSActivityManager : GameSystemManager<OSActivityManager>
{
    Dictionary<int, int[]> rankOpenDays = new Dictionary<int, int[]>();  //排行榜类型:【开始开服天, 结束开服天】
    public Dictionary<int, int[][]> mainLevelRankAwards = new Dictionary<int, int[][]>();  //主线关卡名次:奖励
    public Dictionary<int, int[][]> heroCallRankAwards = new Dictionary<int, int[][]>();  //武将招募名次:奖励
    public List<int> osHeroCallGiftSortList = new List<int>();    //开服招募礼包 充值ID + 100000000
    Dictionary<int, int> rankTypeToFuncID = new Dictionary<int, int>()
    {
        {3, 45},
        {4, 46},
    };
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;
        StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
        FuncOpen.Instance.OnFuncStateChangeEvent += FuncStateChange;
        ParseConfig();
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;
        StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
        FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
    }
    void BeforePlayerDataInitialize()
    {
    }
    void ParseConfig()
    {
        var config = FuncConfigConfig.Get("OSABillboard");
        rankOpenDays = ConfigParse.ParseIntArrayDict(config.Numerical1);
        mainLevelRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
        heroCallRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
        var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroCall];
        var _list = RechargeManager.Instance.GetCTGIDListByType(18);
        for (int i = 0; i < list.Count; i++)
        {
            var item = list[i];
            osHeroCallGiftSortList.Add(item.shopId);
        }
        for (int i = 0; i < _list.Count; i++)
        {
            osHeroCallGiftSortList.Add(_list[i] + 100000000);
        }
    }
    // 开服排行活动是否开启
    public bool IsOpened(int rankType)
    {
        if (!rankTypeToFuncID.ContainsKey(rankType))
        {
            return false;
        }
        if (!FuncOpen.Instance.IsFuncOpen(rankTypeToFuncID[rankType]))
        {
            return false;
        }
        //功能开启里有开始天以开启为准,活动结束后延迟一天关闭展示
        if (!rankOpenDays.ContainsKey(rankType))
        {
            return false;
        }
        var openDays = rankOpenDays[rankType];
        if (TimeUtility.OpenDay > openDays[1])
        {
            return false;
        }
        return true;
    }
    public int GetEndTime(int rankType)
    {
        if (!rankOpenDays.ContainsKey(rankType))
        {
            return 0;
        }
        var openDays = rankOpenDays[rankType];
        return TimeUtility.GetRemindTimeByOpenDay(openDays[1]);
    }
    int CmpGift(int a, int b)
    {
        bool isSaleOutA = false;
        bool isSaleOutB = false;
        if (a < 100000000)
        {
            //商店
            isSaleOutA = StoreModel.Instance.GetShopIDState(a) == 1;
        }
        else
        {
            RechargeManager.Instance.TryGetRechargeCount(a % 100000000, out RechargeCount countData);
            if (countData.totalCount >= CTGConfig.Get(a % 100000000).DailyBuyCount)
            {
                isSaleOutA = true;
            }
        }
        if (b < 100000000)
        {
            isSaleOutB = StoreModel.Instance.GetShopIDState(b) == 1;
        }
        else
        {
            RechargeManager.Instance.TryGetRechargeCount(b % 100000000, out RechargeCount countData);
            if (countData.totalCount >= CTGConfig.Get(b % 100000000).DailyBuyCount)
            {
                isSaleOutB = true;
            }
        }
        if (isSaleOutA != isSaleOutB)
        {
            return isSaleOutA ? 1 : -1;
        }
        return a.CompareTo(b);
    }
    public void RefreshGiftSortList()
    {
        osHeroCallGiftSortList.Sort(CmpGift);
    }
    void RefreshStore()
    {
        UpdateRedpoint();
    }
    Redpoint osMainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_OSMainLevel);
    Redpoint osHeroCallRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroCard);
    public void UpdateRedpoint()
    {
        osMainLevelRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
        osHeroCallRedpoint.state = RedPointState.None;
        if (StoreModel.Instance.freeShopDict.Count == 0) return;
        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall))
        {
            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroCall];
            for (int i = 0; i < shopList.Count; i++)
            {
                var shopID = shopList[i];
                var config = StoreConfig.Get(shopID);
                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
                {
                    osHeroCallRedpoint.state = RedPointState.Simple;
                    break;
                }
            }
        }
    }
    private void FuncStateChange(int funcId)
    {
        switch ((FuncOpenEnum)funcId)
        {
            case FuncOpenEnum.OSMainLevl:
            case FuncOpenEnum.OSHeroCall:
                UpdateRedpoint();
                break;
        }
    }
}
Main/System/OSActivity/OSActivityManager.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c7dec13c51efdd541a8b7cfedcdc9d09
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSHeroCallBaseWin.cs
New file
@@ -0,0 +1,46 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
////开服活动-武将招募活动
public class OSHeroCallBaseWin : FunctionsBaseWin
{
    [SerializeField] Button closBtn;
    protected override void InitComponent()
    {
        base.InitComponent();
        closBtn.AddListener(CloseWindow);
    }
    protected override void OpenSubUIByTabIndex()
    {
        switch (functionOrder)
        {
            case 0:
                RankModel.Instance.ResetQueryParam();
                RankModel.Instance.QueryRankByPage(4, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
                currentSubUI = UIManager.Instance.OpenWindow<OSRankWin>(4);
                break;
            case 1:
                currentSubUI = UIManager.Instance.OpenWindow<OSRankHeroCallAwardWin>();
                break;
            case 2:
                currentSubUI = UIManager.Instance.OpenWindow<OSRankHeroCallGiftWin>();
                break;
        }
    }
}
Main/System/OSActivity/OSHeroCallBaseWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 625a00313ed577e44b0fc884be1e90f2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSMainLevelBaseWin.cs
New file
@@ -0,0 +1,53 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
////开服活动-主线关卡活动
public class OSMainLevelBaseWin : FunctionsBaseWin
{
    [SerializeField] Button closBtn;
    protected override void InitComponent()
    {
        base.InitComponent();
        closBtn.AddListener(CloseWindow);
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        if (!DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel))
        {
            DayRemind.Instance.SetDayRemind(DayRemind.OSMainLevel, true);
            OSActivityManager.Instance.UpdateRedpoint();
        }
    }
    protected override void OpenSubUIByTabIndex()
    {
        switch (functionOrder)
        {
            case 0:
                RankModel.Instance.ResetQueryParam();
                RankModel.Instance.QueryRankByPage(3, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
                currentSubUI = UIManager.Instance.OpenWindow<OSRankWin>(3);
                break;
            case 1:
                currentSubUI = UIManager.Instance.OpenWindow<OSRankMainLeveAwardWin>();
                break;
        }
    }
}
Main/System/OSActivity/OSMainLevelBaseWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2e7af1c80e7f0cb4e803121c8107b934
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankHeroCallAwardCell.cs
New file
@@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class OSRankHeroCallAwardCell : CellView
{
    [SerializeField] Text rankText;
    [SerializeField] Image rankImg;
    [SerializeField] ItemCell[] itemCells;
    public void Display(int index)
    {
        var rank = index + 1;
        if (index < 3)
        {
            rankImg.SetActive(true);
            rankText.SetActive(false);
            rankImg.SetSprite(StringUtility.Contact("Rank", index + 1));
        }
        else
        {
            rankImg.SetActive(false);
            rankText.SetActive(true);
            var keys = OSActivityManager.Instance.heroCallRankAwards.Keys.ToList();
            keys.Sort();
            var startRank = keys[index - 1] + 1;
            var endRank = keys[index];
            rank = endRank;
            if (startRank == endRank)
            {
                rankText.text = startRank.ToString();
            }
            else
            {
                rankText.text = startRank + "-" + endRank;
            }
        }
        var award = OSActivityManager.Instance.heroCallRankAwards[rank];
        for (int i = 0; i < itemCells.Length; i++)
        {
            var itemCell = itemCells[i];
            if (i < award.Length)
            {
                itemCell.SetActive(true);
                int itemID = award[i][0];
                itemCell.Init(new ItemCellModel(itemID, true, award[i][1]));
                itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
            }
            else
            {
                itemCell.SetActive(false);
            }
        }
    }
}
Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3efefc256362c9e4a9538ad84e522737
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankHeroCallAwardWin.cs
New file
@@ -0,0 +1,83 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
////开服活动-武将招募排行榜奖励
public class OSRankHeroCallAwardWin : UIBase
{
    [SerializeField] ScrollerController scrollerController;
    [SerializeField] Text myRankText;
    [SerializeField] Text myRankValueText;
    protected override void OnPreOpen()
    {
        scrollerController.OnRefreshCell += OnRefreshCell;
        CreateScroller();
        DisplayMyRank(4);
    }
    protected override void OnPreClose()
    {
        scrollerController.OnRefreshCell -= OnRefreshCell;
    }
    void CreateScroller()
    {
        var keys = OSActivityManager.Instance.heroCallRankAwards.Keys;
        scrollerController.Refresh();
        for (int i = 0; i < keys.Count; i++)
        {
            scrollerController.AddCell(ScrollerDataType.Header, i);
        }
        scrollerController.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<OSRankHeroCallAwardCell>();
        _cell.Display(cell.index);
    }
    public void DisplayMyRank(int rankType)
    {
        RankData rankData = null;
        rankData = RankModel.Instance.GetMyRank(rankType);
        if (rankData == null)
        {
            myRankText.text = Language.Get("L1045");
            myRankValueText.text = "";//Language.Get("L1125");
            return;
        }
        int rank = rankData.rank;
        if (rankData == null)
        {
            myRankValueText.text = "";//Language.Get("L1125");
        }
        else
        {
            myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
        }
        myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString();
    }
}
Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4c95333a39a8daa4da8ab42140cda281
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankHeroCallGiftCell.cs
New file
@@ -0,0 +1,120 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class OSRankHeroCallGiftCell : CellView
{
    [SerializeField] Text nameText;
    [SerializeField] ItemCell[] itemCells;
    [SerializeField] Button buyBtn;
    [SerializeField] Text moneyText;
    [SerializeField] Image moneyIcon;
    [SerializeField] Transform saleOutRect;
    [SerializeField] Image redImg;
    [SerializeField] Text buyLimitText;
    [SerializeField] Image maskImg;
    public void Display(int index)
    {
        var id = OSActivityManager.Instance.osHeroCallGiftSortList[index];
        if (id > 100000000)
        {
            //充值
            id -= 100000000;
            var ctgConfig = CTGConfig.Get(id);
            nameText.text = ctgConfig.Title;
            for (int i = 0; i < itemCells.Length; i++)
            {
                var itemCell = itemCells[i];
                if (i < ctgConfig.GainItemList.Length)
                {
                    itemCell.SetActive(true);
                    int itemID = ctgConfig.GainItemList[i][0];
                    itemCell.Init(new ItemCellModel(itemID, true, ctgConfig.GainItemList[i][1]));
                    itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
                }
                else
                {
                    itemCell.SetActive(false);
                }
            }
            RechargeManager.Instance.TryGetRechargeCount(id, out var rechargeCount);
            var limitCnt = ctgConfig.DailyBuyCount;
            if (rechargeCount.todayCount < limitCnt)
            {
                saleOutRect.SetActive(false);
                maskImg.SetActive(false);
                buyBtn.SetActive(true);
                buyBtn.SetListener(() =>
                {
                    RechargeManager.Instance.CTG(id);
                });
                RechargeManager.Instance.TryGetOrderInfo(id, out var orderInfo);
                moneyText.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNumOnSale);
                moneyIcon.SetActive(false);
            }
            else
            {
                saleOutRect.SetActive(true);
                maskImg.SetActive(true);
                buyBtn.SetActive(false);
            }
            buyLimitText.text = Language.Get("storename6", limitCnt - rechargeCount.todayCount, limitCnt);
            redImg.SetActive(false);
        }
        else
        {
            //商店
            var storeConfig = StoreConfig.Get(id);
            nameText.text = storeConfig.Name;
            var awards = StoreModel.Instance.GetShopItemlistEx(storeConfig);
            for (int i = 0; i < itemCells.Length; i++)
            {
                var itemCell = itemCells[i];
                if (i < awards.Count)
                {
                    itemCell.SetActive(true);
                    int itemID = awards[i][0];
                    itemCell.Init(new ItemCellModel(itemID, true, awards[i][1]));
                    itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
                }
                else
                {
                    itemCell.SetActive(false);
                }
            }
            var state = StoreModel.Instance.GetShopIDState(id);
            if (state == 1)
            {
                saleOutRect.SetActive(true);
                maskImg.SetActive(true);
                buyBtn.SetActive(false);
                redImg.SetActive(false);
            }
            else
            {
                saleOutRect.SetActive(false);
                maskImg.SetActive(false);
                buyBtn.SetActive(true);
                buyBtn.SetListener(() =>
                {
                    StoreModel.Instance.SendBuyShopItemWithPopCheck(storeConfig, 1);
                });
                moneyText.text = storeConfig.MoneyNum == 0 ? Language.Get("L1127") : storeConfig.MoneyNum.ToString();
                moneyIcon.SetActive(storeConfig.MoneyNum != 0);
                moneyIcon.SetIconWithMoneyType(storeConfig.MoneyType);
                redImg.SetActive(storeConfig.MoneyNum == 0);
            }
            var buyCnt = StoreModel.Instance.GetShopLimitBuyCount(id);
            buyLimitText.text = Language.Get("storename6", storeConfig.LimitCnt - buyCnt, storeConfig.LimitCnt);
        }
    }
}
Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 002c4b8249e5e3c419d7146aaaa716b9
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankHeroCallGiftWin.cs
New file
@@ -0,0 +1,63 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//开服活动-武将招募礼包
public class OSRankHeroCallGiftWin : UIBase
{
    [SerializeField] ScrollerController scrollerController;
    protected override void OnPreOpen()
    {
        scrollerController.OnRefreshCell += OnRefreshCell;
        StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
        RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent;
        OSActivityManager.Instance.RefreshGiftSortList();
        Display();
    }
    protected override void OnPreClose()
    {
        scrollerController.OnRefreshCell -= OnRefreshCell;
        StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
        RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent;
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as OSRankHeroCallGiftCell;
        _cell.Display(cell.index);
    }
    void Display()
    {
        scrollerController.Refresh();
        for (int i = 0; i < OSActivityManager.Instance.osHeroCallGiftSortList.Count; i++)
        {
            scrollerController.AddCell(ScrollerDataType.Header, i);
        }
        scrollerController.Restart();
    }
    void RefreshStore()
    {
        scrollerController.m_Scorller.RefreshActiveCellViews();
    }
    void OnRechargeCountEvent(int id)
    {
        scrollerController.m_Scorller.RefreshActiveCellViews();
    }
}
Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a2f6ca07e3517cf4aac0abab1ce8a454
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankMainLeveAwardCell.cs
New file
@@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class OSRankMainLeveAwardCell : CellView
{
    [SerializeField] Text rankText;
    [SerializeField] Image rankImg;
    [SerializeField] ItemCell[] itemCells;
    public void Display(int index)
    {
        var rank = index + 1;
        if (index < 3)
        {
            rankImg.SetActive(true);
            rankText.SetActive(false);
            rankImg.SetSprite(StringUtility.Contact("Rank", index + 1));
        }
        else
        {
            rankImg.SetActive(false);
            rankText.SetActive(true);
            var keys = OSActivityManager.Instance.mainLevelRankAwards.Keys.ToList();
            keys.Sort();
            var startRank = keys[index - 1] + 1;
            var endRank = keys[index];
            rank = endRank;
            if (startRank == endRank)
            {
                rankText.text = startRank.ToString();
            }
            else
            {
                rankText.text = startRank + "-" + endRank;
            }
        }
        var award = OSActivityManager.Instance.mainLevelRankAwards[rank];
        for (int i = 0; i < itemCells.Length; i++)
        {
            var itemCell = itemCells[i];
            if (i < award.Length)
            {
                itemCell.SetActive(true);
                int itemID = award[i][0];
                itemCell.Init(new ItemCellModel(itemID, true, award[i][1]));
                itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
            }
            else
            {
                itemCell.SetActive(false);
            }
        }
    }
}
Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c7c89cdc2160945468c6bc1420bbf405
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankMainLeveAwardWin.cs
New file
@@ -0,0 +1,82 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//开服活动-主线关卡排行奖励
public class OSRankMainLeveAwardWin : UIBase
{
    [SerializeField] ScrollerController scrollerController;
    [SerializeField] Text myRankText;
    [SerializeField] Text myRankValueText;
    protected override void OnPreOpen()
    {
        scrollerController.OnRefreshCell += OnRefreshCell;
        CreateScroller();
        DisplayMyRank(3);
    }
    protected override void OnPreClose()
    {
        scrollerController.OnRefreshCell -= OnRefreshCell;
    }
    void CreateScroller()
    {
        var keys = OSActivityManager.Instance.mainLevelRankAwards.Keys;
        scrollerController.Refresh();
        for (int i = 0; i < keys.Count; i++)
        {
            scrollerController.AddCell(ScrollerDataType.Header, i);
        }
        scrollerController.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<OSRankMainLeveAwardCell>();
        _cell.Display(cell.index);
    }
    public void DisplayMyRank(int rankType)
    {
        RankData rankData = null;
        rankData = RankModel.Instance.GetMyRank(rankType);
        if (rankData == null)
        {
            myRankText.text = Language.Get("L1045");
            myRankValueText.text = "";//Language.Get("L1125");
            return;
        }
        int rank = rankData.rank;
        if (rankData == null)
        {
            myRankValueText.text = "";//Language.Get("L1125");
        }
        else
        {
            myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
        }
        myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString();
    }
}
Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 70dab80b73c888a4f9342841075f2c98
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/OSActivity/OSRankWin.cs
New file
@@ -0,0 +1,61 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//开服活动-排行榜  3 - 开服关卡榜 ; 4 - 开服招募榜
public class OSRankWin : PlayerRankWin
{
    [SerializeField] Text timeText;
    [SerializeField] Text overTimeText;
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        GlobalTimeEvent.Instance.secondEvent += OnSecond;
        ShowTime();
    }
    void ShowTime()
    {
        var seconds = OSActivityManager.Instance.GetEndTime(rankType);
        if (seconds > 0)
        {
            timeText.SetActive(true);
            overTimeText.SetActive(false);
            timeText.text = TimeUtility.SecondsToShortDHMS(seconds);
        }
        else
        {
            timeText.SetActive(false);
            overTimeText.SetActive(true);
        }
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        GlobalTimeEvent.Instance.secondEvent -= OnSecond;
    }
    void OnSecond()
    {
        ShowTime();
    }
}
Main/System/OSActivity/OSRankWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0a29b5ea6f0229e45afdfecebbab816e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Redpoint/MainRedDot.cs
@@ -70,7 +70,8 @@
    //自动战斗
    public const int RedPoint_AutoBattleKey = 110;
    Redpoint autoBattleRedpoint = new Redpoint(RedPoint_AutoBattleKey);
    public const int RedPoint_OSMainLevel = 111;
    public const int RedPoint_OSHeroCard = 112;
    public const int RedPoint_Download = 116;
    //武将卡
@@ -131,6 +132,7 @@
    public const int TianziBillboradRepoint = 471; //天子的考验
    public const int PhantasmPavilionRepoint = 472; //幻境阁
    public const int LineupRecommendRepoint = 473; //阵容推荐
     public const int FunctionPreviewRepoint = 474; //功能预告
    public void Register()
    {
Main/System/Store/StoreModel.cs
@@ -22,7 +22,7 @@
public class StoreModel : GameSystemManager<StoreModel>
{
    public Dictionary<int, List<StoreData>> storeTypeDict { get; private set; } //所有显示商品
    public Dictionary<int, List<StoreData>> storeTypeDict { get; private set; } //所有显示商品 商店类型:商品列表
    public Dictionary<int, int> shopRefreshCntDict = new Dictionary<int, int>();    //刷新次数
    private Dictionary<int, int> shopItemlimitDict = new Dictionary<int, int>();    //已购买次数
    public event Action RefreshBuyShopLimitEvent;
@@ -38,7 +38,7 @@
    public int heroSoulRefreshMoney;
    public int heroSoulRefreshFreeCount;
    Dictionary<int, List<int>> freeShopDict = new Dictionary<int, List<int>>();
    public Dictionary<int, List<int>> freeShopDict = new Dictionary<int, List<int>>();  //免费商品 商店类型:商品列表
    public Dictionary<int, int> shopMoneyTypeDict = new Dictionary<int, int>();
    public override void Init()
@@ -320,7 +320,7 @@
        if (storeConfig.ItemID != 0)
        {
            ShopItemInfo shopItem = new ShopItemInfo(storeConfig.ID, storeConfig.ItemCnt);
            ShopItemInfo shopItem = new ShopItemInfo(storeConfig.ItemID, storeConfig.ItemCnt);
            shopItemlist.Add(shopItem);
        }
        var extraItem = storeConfig.ItemListEx;
@@ -343,7 +343,7 @@
        List<int[]> shopItemlist = new List<int[]>();
        if (storeConfig.ItemID != 0)
        {
            shopItemlist.Add(new int[] { storeConfig.ID, storeConfig.ItemCnt});
            shopItemlist.Add(new int[] { storeConfig.ItemID, storeConfig.ItemCnt});
        }
        var extraItem = storeConfig.ItemListEx;
        for (int i = 0; i < extraItem.Length; i++)
@@ -372,8 +372,10 @@
    }
    //仙玉购买物品的二次确认框,一级货币只有仙玉 默认为仙玉即可
    //货币购买的二次确认框的确认记录
    Dictionary<int, bool> buyItemCheckDict = new Dictionary<int, bool>();   //记录勾选信息
    //购买商店物品的二次确认框
    //eventType 二次确认框类型,对应枚举 BuyStoreItemCheckType
    public void SendBuyShopItemWithPopCheck(StoreConfig model, int count, int eventType = 0)
    {
@@ -390,7 +392,7 @@
            return;
        }
        ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("CostMoney", model.MoneyNum, model.MoneyType),
        ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("BuyStoreItem", model.MoneyNum, model.MoneyType, model.Name),
        Language.Get("ConfirmCancel102"), (bool isOk, bool isToggle) =>
        {
            if (isOk)
@@ -567,6 +569,7 @@
    Normal = 1, //1:坊市
    Guild = 2, //2:公会
    Hero = 3, //3:将魂
    OSHeroCall = 4, //4:开服招募礼包
    
}
Main/Utility/EnumHelper.cs
@@ -837,7 +837,9 @@
    Horse = 37,  //坐骑
    BattlePass = 40, //基金(战令)
    LLMJ = 41,  //历练秘笈
    OSMainLevl = 45, //开服关卡榜活动
    OSHeroCall = 46, //开服武将召唤榜活动
    FunctionPreview = 48, //功能预览
}