hch
2 天以前 b5cdc4acce06b4e9d21b4cc56e99591fe0381564
108 【主界面】仙树升级
213 【付费内容】特权卡 - 临时
1 文件已重命名
10个文件已修改
5个文件已删除
3 文件已复制
4个文件已添加
724 ■■■■ 已修改文件
Main/Config/ConfigManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/InvestConfig.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/PlayerPropertyConfig.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagMCInvestInfo.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagMCInvestInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagSCInvestInfo.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagSCInvestInfo.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagMCInvestInfo.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagMCInvestInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagSCInvestInfo.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagSCInvestInfo.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/BlessLVADWin.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/BlessLVADWin.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/BlessLVManager.cs 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/BlessLVWin.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Invest/InvestModel.cs 270 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Recharge/PrivilegeCardWin.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Recharge/PrivilegeCardWin.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/ConfigManager.cs
@@ -58,7 +58,6 @@
            typeof(HeroQualityLVConfig),
            typeof(HorseClassConfig),
            typeof(HorseSkinConfig),
            typeof(InvestConfig),
            typeof(ItemCompoundConfig),
            typeof(ItemConfig),
            typeof(LLMJConfig),
@@ -273,7 +272,6 @@
        // 清空 HorseSkinConfig 字典
        ClearConfigDictionary<HorseSkinConfig>();
        // 清空 InvestConfig 字典
        ClearConfigDictionary<InvestConfig>();
        // 清空 ItemCompoundConfig 字典
        ClearConfigDictionary<ItemCompoundConfig>();
        // 清空 ItemConfig 字典
Main/Config/Configs/InvestConfig.cs
File was deleted
Main/Config/PartialConfigs/PlayerPropertyConfig.cs
@@ -107,12 +107,12 @@
    }
    //largeNumFormat 大数值格式:0 默认原数值 1 按万或者(K)显示 2 按6位数以上(才转换大数值,根据情况可统一调整)
    public static string GetValueDescription(int id, long value, int largeNumFormat = 1)
    public static string GetValueDescription(int id, long value, int largeNumFormat = 2)
    {
        return GetValueDescriptionEx(id, value, largeNumFormat);
    }
    public static string GetValueDescriptionEx(int id, long value, int largeNumFormat = 1)
    public static string GetValueDescriptionEx(int id, long value, int largeNumFormat = 2)
    {
        var config = Get(id);
        if (config == null)
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagMCInvestInfo.cs
File was deleted
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagMCInvestInfo.cs.meta
File was deleted
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagSCInvestInfo.cs
New file
@@ -0,0 +1,12 @@
using UnityEngine;
using System.Collections;
// A3 38 投资信息 #tagSCInvestInfo
public class DTCA338_tagSCInvestInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA338_tagSCInvestInfo vNetData = vNetPack as HA338_tagSCInvestInfo;
        InvestModel.Instance.UpdateInvestInfo(vNetData);
    }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA338_tagSCInvestInfo.cs.meta
File was renamed from Main/Config/Configs/InvestConfig.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ff3d77591e2aeaa438955b2b6322cfba
guid: 6691147a9486d0c4fb11244f78333c35
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs
@@ -4,8 +4,7 @@
// B1 21 仙树信息 #tagMCTreeInfo
public class DTCB121_tagMCTreeInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack)
    {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HB121_tagMCTreeInfo vNetData = vNetPack as HB121_tagMCTreeInfo;
        BlessLVManager.Instance.UpdateBlessLVInfo(vNetData);
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -98,7 +98,7 @@
        Register(typeof(HB125_tagSCPlayerHeroInfo), typeof(DTCB125_tagSCPlayerHeroInfo));
        Register(typeof(HA814_tagMCMakeItemAnswer), typeof(DTCA814_tagMCMakeItemAnswer));
        Register(typeof(HB122_tagSCHeroInfo), typeof(DTCB122_tagSCHeroInfo));
        Register(typeof(HA338_tagMCInvestInfo), typeof(DTCA338_tagMCInvestInfo));
        Register(typeof(HA338_tagSCInvestInfo), typeof(DTCA338_tagSCInvestInfo));
        Register(typeof(HB121_tagMCTreeInfo), typeof(DTCB121_tagMCTreeInfo));
        Register(typeof(HA720_tagMCCreateRoleAwardState), typeof(DTCA720_tagMCCreateRoleAwardState));
        Register(typeof(HB405_tagMCAddExp), typeof(DTCB405_tagMCAddExp));
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagMCInvestInfo.cs
File was deleted
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagMCInvestInfo.cs.meta
File was deleted
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagSCInvestInfo.cs
New file
@@ -0,0 +1,23 @@
using UnityEngine;
using System.Collections;
// A3 38 投资信息 #tagSCInvestInfo
public class HA338_tagSCInvestInfo : GameNetPackBasic {
    public byte InvestType;    // 投资类型
    public uint InvestBuyTime;    // 投资购买时间戳,永久的通过该时间判断是否有效或已过天数,任意类型均有该值,过期没有重置,前端自己判断
    public uint InvestEndTime;    // 投资到期时间戳,非永久的通过该时间判断到期时间,有天数限制的才有值
    public byte AwardState;    // 今日是否已领取奖励
    public HA338_tagSCInvestInfo () {
        _cmd = (ushort)0xA338;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out InvestType, vBytes, NetDataType.BYTE);
        TransBytes (out InvestBuyTime, vBytes, NetDataType.DWORD);
        TransBytes (out InvestEndTime, vBytes, NetDataType.DWORD);
        TransBytes (out AwardState, vBytes, NetDataType.BYTE);
    }
}
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagSCInvestInfo.cs.meta
copy from Main/Config/Configs/InvestConfig.cs.meta copy to Main/Core/NetworkPackage/ServerPack/HA3_Function/HA338_tagSCInvestInfo.cs.meta
File was copied from Main/Config/Configs/InvestConfig.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ff3d77591e2aeaa438955b2b6322cfba
guid: 6cb173a2eae27ba4f9194108916e9b48
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs
@@ -1,14 +1,14 @@
using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections;
// B1 21 仙树信息 #tagMCTreeInfo
public class HB121_tagMCTreeInfo : GameNetPackBasic {
    public byte TreeLV;    // 当前仙树等级
    public byte LVUPState;    // 0-非升级中;1-升级中
    public uint LVUPRemainTime;    // 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级
    public byte FreeTimeCnt;    // 今日已免费减时次数
    public uint FreeTimeLast;    // 上次免费减时时间戳
    public byte Energy;    // 当前累计充能次数
    public uint EnergyTimeLast;    // 上次获得充能次数时间戳
    public HB121_tagMCTreeInfo () {
        _cmd = (ushort)0xB121;
@@ -18,8 +18,8 @@
        TransBytes (out TreeLV, vBytes, NetDataType.BYTE);
        TransBytes (out LVUPState, vBytes, NetDataType.BYTE);
        TransBytes (out LVUPRemainTime, vBytes, NetDataType.DWORD);
        TransBytes (out FreeTimeCnt, vBytes, NetDataType.BYTE);
        TransBytes (out FreeTimeLast, vBytes, NetDataType.DWORD);
        TransBytes (out Energy, vBytes, NetDataType.BYTE);
        TransBytes (out EnergyTimeLast, vBytes, NetDataType.DWORD);
    }
}
Main/System/Equip/BlessLVADWin.cs
New file
@@ -0,0 +1,50 @@

using System;
using UnityEngine;
using UnityEngine.UI;
public class BlessLVADWin : UIBase
{
    [SerializeField] Text moneyText;
    [SerializeField] Image moneyTypeImg;
    [SerializeField] Button adBtn;
    [SerializeField] Button useMoneyBtn;
    protected override void InitComponent()
    {
        adBtn.AddListener(OnAD);
        useMoneyBtn.AddListener(OnUseMoney);
    }
    protected override void OnPreOpen()
    {
        moneyText.text = UIHelper.ShowUseMoney(BlessLVManager.Instance.freeEnergyMoneyType, BlessLVManager.Instance.freeEnergyMoney);
        moneyTypeImg.SetIconWithMoneyType(BlessLVManager.Instance.freeEnergyMoneyType);
    }
    void OnAD()
    {
        AdsManager.Instance.SendGetReward(4);
        CloseWindow();
    }
    void OnUseMoney()
    {
        CloseWindow();
        if (UIHelper.CheckMoneyCount(BlessLVManager.Instance.freeEnergyMoneyType, BlessLVManager.Instance.freeEnergyMoney, 2))
        {
            var pack = new CA504_tagCMPlayerGetReward();
            pack.RewardType = 82;
            GameNetSystem.Instance.SendInfo(pack);
        }
    }
}
Main/System/Equip/BlessLVADWin.cs.meta
copy from Main/Config/Configs/InvestConfig.cs.meta copy to Main/System/Equip/BlessLVADWin.cs.meta
File was copied from Main/Config/Configs/InvestConfig.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ff3d77591e2aeaa438955b2b6322cfba
guid: 199b4612be93c4e4098abc71de6cdb64
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/System/Equip/BlessLVManager.cs
@@ -9,17 +9,22 @@
    public int m_TreeLV { get; private set; }    // 当前仙树等级
    public int m_LVUPState { get; private set; } // 0-非升级中;1-升级中
    public int m_LVUPRemainTime { get; private set; } // 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级
    public int m_FreeTimeCnt { get; private set; }    // 今日已免费减时次数
    public int m_FreeTimeLast { get; private set; } // 上次免费减时时间戳
    public int m_Energy;    // 当前累计充能次数
    public int m_EnergyTimeLast;    // 上次获得充能次数时间戳
    public event Action OnBlessLVUpdateEvent;
    int m_LVPackTime; //收包时间用于计算剩余时间m_LVUPRemainTime
    public int upgradeTreeMoneyType; //升级仙树消耗的货币类型
    public int timeUpTreeItemID; //加速仙树升级的道具ID
    public int timeUpTreeItemSubTime; //减少仙树升级时间的道具减少的时间
    public int dayFreeMaxTimes; //每日免费升级次数
    public int freeTimeCD; //免费减少时间的冷却CD 分
    public int freeSubTime; //免费减少的时间 分
    int freeEnergyMax; //充能次数上限,特权额外次数在 InvestPower 配置
    public int freeEnergyCD; //充能CD,分钟,x分钟获得1个能量
    public int freeEnergySubTreeTime; //领取充能奖励减少祝福升级时间 分钟
    public int freeEnergyMoneyType; //可消耗货币领取充能奖励, 货币类型|货币值,也可广告领取,二选一
    public int freeEnergyMoney;
    public int lastTreeLV; //上一次树的等级 用于打开界面的时候播放下升级特效
@@ -28,6 +33,8 @@
        m_TreeLV = 0;
        m_LVUPState = 0;
        m_LVUPRemainTime = 0;
        m_Energy = 0;
        m_EnergyTimeLast = 0;
        m_LVPackTime = 0;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOK;
        GlobalTimeEvent.Instance.fiveSecondEvent += OnTimeEvent;
@@ -56,9 +63,15 @@
        var arr = config.Numerical2.Split('|');
        timeUpTreeItemID = int.Parse(arr[0]);
        timeUpTreeItemSubTime = int.Parse(arr[1]);
        dayFreeMaxTimes = int.Parse(config.Numerical3);
        freeTimeCD = int.Parse(config.Numerical4);
        freeSubTime = int.Parse(config.Numerical5);
        config = FuncConfigConfig.Get("TreeEnergy");
        freeEnergyMax = int.Parse(config.Numerical2);
        freeEnergyCD = int.Parse(config.Numerical3);
        freeEnergySubTreeTime = int.Parse(config.Numerical4);
        arr = config.Numerical5.Split('|');
        freeEnergyMoneyType = int.Parse(arr[0]);
        freeEnergyMoney = int.Parse(arr[1]);
    }
    public void UpdateBlessLVInfo(HB121_tagMCTreeInfo netPack)
@@ -66,8 +79,8 @@
        m_TreeLV = netPack.TreeLV;
        m_LVUPState = netPack.LVUPState;
        m_LVUPRemainTime = (int)netPack.LVUPRemainTime;
        m_FreeTimeCnt = netPack.FreeTimeCnt;
        m_FreeTimeLast = (int)netPack.FreeTimeLast;
        m_Energy = netPack.Energy;
        m_EnergyTimeLast = (int)netPack.EnergyTimeLast;
        m_LVPackTime = TimeUtility.AllSeconds;
        if (lastTreeLV == 0)
        {
@@ -85,11 +98,15 @@
        return m_LVUPRemainTime - (TimeUtility.AllSeconds - m_LVPackTime);
    }
    public int GetMaxEnergyCnt()
    {
        return freeEnergyMax;
    }
    //充能时间倒计时, 用于客户端主动领取 或者 只有从0到1才显示用
    public int GetFreeRemainTime()
    {
        if (m_LVUPState == 0)
            return 0;
        return m_FreeTimeLast + freeTimeCD * 60 - TimeUtility.AllSeconds;
        return freeEnergyCD * 60 - (TimeUtility.AllSeconds - m_EnergyTimeLast);
    }
    Redpoint redpointTree = new Redpoint(MainRedDot.BlessLVRedpoint);
@@ -122,7 +139,7 @@
            {
                redpointTreeItem.state = RedPointState.Simple;
            }
            if (m_FreeTimeCnt < dayFreeMaxTimes && GetFreeRemainTime() <= 0)
            if (m_Energy > 0)
            {
                redpointTreeFree.state = RedPointState.Simple;
            }
@@ -156,10 +173,29 @@
            AutoUpgrade();
        }
        SendGetFreeEnergy();
        UpdateTreeRedpoint();
    }
    public void SendGetFreeEnergy()
    {
        if (m_Energy >= GetMaxEnergyCnt())
        {
            return;
        }
        if (GetFreeRemainTime() > 0)
        {
            return;
        }
        var pack = new CA504_tagCMPlayerGetReward();
        pack.RewardType = 82;
        pack.DataEx = 1;
        GameNetSystem.Instance.SendInfo(pack);
    }
    //装备品质的起始表现,最小1
    public int GetStartEquipQuality()
Main/System/Equip/BlessLVWin.cs
@@ -17,6 +17,7 @@
    [SerializeField] Button timeUpBtn;  //加速时间按钮
    [SerializeField] Button freeBtn;
    [SerializeField] Text freeLeftTime;
    [SerializeField] Text energyCntText;
    [SerializeField] Transform upgradeWaiteState; //待升级
    [SerializeField] Image processImg;  //进度
@@ -41,9 +42,7 @@
        freeBtn.AddListener(() =>
        {
            var pack = new CA504_tagCMPlayerGetReward();
            pack.RewardType = 82;
            GameNetSystem.Instance.SendInfo(pack);
            UIManager.Instance.OpenWindow<BlessLVADWin>();
        });
    }
@@ -131,26 +130,26 @@
        itemCntTxt.text = itemCnt + "/" + needCount;
        itemCntTxt.color = itemCnt >= needCount ? UIHelper.GetUIColor(TextColType.Green, true) : UIHelper.GetUIColor(TextColType.Red, true);
        if (BlessLVManager.Instance.m_FreeTimeCnt < BlessLVManager.Instance.dayFreeMaxTimes)
        if (BlessLVManager.Instance.m_Energy == 0)
        {
            freeBtn.interactable = false;
            var freeeRemainTime = BlessLVManager.Instance.GetFreeRemainTime();
            if (freeeRemainTime > 0)
            {
                freeLeftTime.text = TimeUtility.SecondsToHMS(freeeRemainTime);
                freeBtn.interactable = false;
            }
            else
            {
                freeLeftTime.text = "";
                freeBtn.interactable = true;
            }
        }
        else
        {
            freeLeftTime.text = "";
            freeBtn.interactable = false;
            freeBtn.interactable = true;
        }
        energyCntText.text = Language.Get("BlessTree9", BlessLVManager.Instance.m_Energy, BlessLVManager.Instance.GetMaxEnergyCnt());
    }
    void CreateScroller()
Main/System/Invest/InvestModel.cs
@@ -6,36 +6,24 @@
public class InvestModel : GameSystemManager<InvestModel>
{
    // public ILOpenServerActivityProxy activity;
    public const int FuncID = 25;
    public const int monthCardType = 1; // 月卡
    public const int foreverCardType = 2; //永久卡 权限
    //投资对应奖励
    Dictionary<int, Dictionary<int, List<Item>>> m_InvestItems = new Dictionary<int, Dictionary<int, List<Item>>>();
    Dictionary<int, int[][]> m_InvestItems = new Dictionary<int, int[][]>();
    //投资对应充值ID
    Dictionary<int, int[]> m_InvestRechargeIds = new Dictionary<int, int[]>();
    //投资对应购买情况
    Dictionary<int, InvestInfo> m_InvestInfos = new Dictionary<int, InvestInfo>();
    //{投资类型:[领取天,当前天]} 天从1开始
    Dictionary<int, List<List<int>>> m_InvestSingleInfos = new Dictionary<int, List<List<int>>>();
    //投资对应的红点
    Dictionary<int, Redpoint> m_Redpoints = new Dictionary<int, Redpoint>();
    //投资类型
    public List<int> investTypes = new List<int>();
    //永久卡 权限
    public const int foreverCardType = 12; //投资类型
    public const int monthCardType = 7; // 月卡7
    public event Action onSelectUpdate;
    public event Action<int> onInvestUpdate;
    public const int redpointID = 20931;
    public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, redpointID);
    public Redpoint redpoint = new Redpoint(redpointID);
    public override void Init()
@@ -60,14 +48,13 @@
    public bool IsOpen()
    {
        return FuncOpen.Instance.IsFuncOpen(FuncID);
        return FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.PrivilegeCard);
    }
    
    public void OnBeforePlayerDataInitialize()
    {
        m_InvestInfos.Clear();
        m_InvestSingleInfos.Clear();
    }
    public void OnPlayerLoginOk()
@@ -78,49 +65,16 @@
    void ParseConfig()
    {
        investTypes.Clear();
        var funcConfig = FuncConfigConfig.Get("InvestCost");
        m_InvestRechargeIds = ConfigParse.ParseIntArrayDict(funcConfig.Numerical3);
        //m_Redpoints
        m_InvestRechargeIds = ConfigParse.ParseIntArrayDict(funcConfig.Numerical1);
        funcConfig = FuncConfigConfig.Get("InvestDay");
        m_InvestItems = ConfigParse.ParseIntArray2Dict(funcConfig.Numerical3);
        investTypes = m_InvestRechargeIds.Keys.ToList();
        investTypes.Sort();
        var configs = InvestConfig.GetValues();
        for (int i = 0; i < configs.Count; i++)
        {
            var config = configs[i];
            if (!investTypes.Contains(config.type))
            {
                continue;
            }
            Dictionary<int, List<Item>> dict;
            if (!m_InvestItems.TryGetValue(config.type, out dict))
            {
                dict = new Dictionary<int, List<Item>>();
                m_InvestItems.Add(config.type, dict);
            }
            List<Item> items;
            if (!dict.TryGetValue(config.id, out items))
            {
                items = new List<Item>();
                dict.Add(config.id, items);
            }
            var itemArray = config.award[1];    //1暂时约定月卡 永久卡,其他的自定义后续再定
            for (int j = 0; j < itemArray.Length; j++)
            {
                items.Add(new Item()
                {
                    id = itemArray[j][0],
                    countEx = itemArray[j][1],
                    bind = itemArray[j][2],
                });
            }
        }
    }
    public OrderInfoConfig GetOrderInfoId(int type)
@@ -144,113 +98,70 @@
    }
    public int GetInvestPassDays(int type)
    {
        return m_InvestInfos.ContainsKey(type) ? m_InvestInfos[type].days : 0;
    }
    // public int GetInvestPassDays(int type)
    // {
    //     return m_InvestInfos.ContainsKey(type) ? m_InvestInfos[type].days : 0;
    // }
    //获得单投资的总收益
    public long GetTotalIncome(int type)
    {
        long income = 0;
        if (m_InvestItems.ContainsKey(type))
        {
            var keyList = m_InvestItems[type].Keys.ToList();
            for (int i = 0; i < keyList.Count; i++)
            {
                var items = m_InvestItems[type][keyList[i]];
                for (var j = 0; j < items.Count; j++)
                {
                    var item = items[j];
                    if (item.id == 20 || item.id == 30)
                        income += item.countEx;
                }
            }
        }
        return income;
    }
    //id 为表里的ID
    //0-未投资 1-未达成 2-可领取 3-已领取
    public int GetSingleInvestState(int type, int id)
    {
        if (IsInvested(type))
        {
            var day = GetInvestPassDays(type);
            if (m_InvestItems.ContainsKey(type)
                && m_InvestItems[type].ContainsKey(id))
            {
                if (IsRewardGot(type, id))
                {
                    return 3;
                }
                var config = InvestConfig.Get(id);
        // if (IsInvested(type))
        // {
        //     var day = GetInvestPassDays(type);
        //     if (m_InvestItems.ContainsKey(type)
        //         && m_InvestItems[type].ContainsKey(id))
        //     {
        //         if (IsRewardGot(type, id))
        //         {
        //             return 3;
        //         }
        //         var config = InvestConfig.Get(id);
                if (!m_InvestSingleInfos.ContainsKey(type))
                {
                    return 0;
                }
        //         if (!m_InvestSingleInfos.ContainsKey(type))
        //         {
        //             return 0;
        //         }
                var index = id % 100;
                //每个数按位存31个激活索引
                var listIndex = index / 31;
                var bitIndex = index % 31;
        //         var index = id % 100;
        //         //每个数按位存31个激活索引
        //         var listIndex = index / 31;
        //         var bitIndex = index % 31;
                return day < config.needDay ? 1 : 2;
            }
        }
        //         return day < config.needDay ? 1 : 2;
        //     }
        // }
        return 0;
    }
    public bool TryGetItems(int type, int id, out List<Item> items)
    {
        items = null;
        if (m_InvestItems.ContainsKey(type))
        {
            return m_InvestItems[type].TryGetValue(id, out items);
        }
        return false;
    }
    public List<int> GetIdsByType(int type)
    {
        if (m_InvestItems.ContainsKey(type))
        {
            return m_InvestItems[type].Keys.ToList();
        }
        return null;
    }
    //判断是否购买了投资
    public bool IsInvested(int type)
    {
        return m_InvestInfos.ContainsKey(type) && m_InvestInfos[type].money > 0;
        if (!m_InvestInfos.ContainsKey(type))
        {
            return false;
        }
        if (type == 1)
        {
            //月卡 限时类型的投资 未到期就算投资
            return m_InvestInfos[type].InvestEndTime > 0 && m_InvestInfos[type].InvestEndTime < TimeUtility.AllSeconds;
        }
        //永久类型的投资 只要购买了就算投资
        return m_InvestInfos[type].InvestBuyTime > 0;
    }
    //奖励是否已领取
    public bool IsRewardGot(int type, int id)
    {
        if (m_InvestSingleInfos.ContainsKey(type))
        {
            var index = id % 100;
            //每个数按位存31个激活索引
            var listIndex = index / 31;
            var bitIndex = index % 31;
            return ((int)Math.Pow(2, bitIndex) & m_InvestSingleInfos[type][1][listIndex]) != 0;
        }
        return false;
    }
    private void OnFuncStateChangeEvent(int id)
    {
        if (id == FuncID)
        if (id == (int)FuncOpenEnum.PrivilegeCard)
        {
            // activity.StateUpdate(id);
            UpdateRedpoint();
        }
@@ -262,7 +173,7 @@
    {
        var pak = new CA541_tagCMGetInvestReward();
        pak.InvestType = (byte)type;
        pak.RewardIndex = (byte)(id % 100);
        pak.RewardIndex = (byte)id;
        GameNetSystem.Instance.SendInfo(pak);
    }
@@ -272,7 +183,7 @@
        RechargeManager.Instance.CTG(GetOrderInfoId(type));
    }
    public void UpdateInvestInfo(HA338_tagMCInvestInfo package)
    public void UpdateInvestInfo(HA338_tagSCInvestInfo package)
    {
        if (!investTypes.Contains(package.InvestType))
        {
@@ -281,26 +192,12 @@
        m_InvestInfos[package.InvestType] = new InvestInfo()
        {
            days = (int)package.CurDay,
            money = package.CurDay >= 1 ? 1 : 0,
            InvestBuyTime = (int)package.InvestBuyTime,
            InvestEndTime = (int)package.InvestEndTime,
            AwardState = package.AwardState
        };
        List<List<int>> singleInfos;
        if (!m_InvestSingleInfos.TryGetValue(package.InvestType, out singleInfos))
        {
            singleInfos = new List<List<int>>();
            m_InvestSingleInfos.Add(package.InvestType, singleInfos);
        }
        singleInfos.Clear();
        singleInfos.Add(new List<int>());
        singleInfos.Add(new List<int>());
        singleInfos.Add(new List<int>());
        singleInfos[0].Add((int)package.CurDay);
        for (int i = 0; i < package.ValueCount; i++)
        {
            singleInfos[1].Add((int)package.RewardValue[i]);
            singleInfos[2].Add((int)package.ProgressValue[i]);
        }
        UpdateRedpoint();
        if (onInvestUpdate != null)
@@ -311,67 +208,20 @@
    void UpdateRedpoint()
    {
        List<int> redpointTypes = new List<int>();
        if (IsOpen())
        if (!IsOpen())
        {
            for (var i = 0; i < investTypes.Count; i++)
            {
                var type = investTypes[i];
                if (!IsInvested(type))
                {
                    continue;
                }
                var keyList = m_InvestItems[type].Keys.ToList();
                for (int j = 0; j < keyList.Count; j++)
                {
                    var id = keyList[j];
                    if (GetSingleInvestState(type, id) == 2)
                    {
                        redpointTypes.Add(type);
                        break;
                    }
                }
            }
            return;
        }
        var redList = m_Redpoints.Keys.ToList();
        for (int j = 0; j < redList.Count; j++)
        {
            var type = redList[j];
            m_Redpoints[type].state = redpointTypes.Contains(type) ? RedPointState.Simple : RedPointState.None;
        }
    }
    
    //已经购买并领取所有物品
    public bool IsFinish()
    {
        for (int i = 0; i < investTypes.Count; i++)
        {
            int type = investTypes[i];
            //忽略永久卡
            if (type == foreverCardType)
                continue;
            var idsList = GetIdsByType(type);
            if (idsList.IsNullOrEmpty())
                continue;
            for (int j = 0; j < idsList.Count; j++)
            {
                int id = idsList[j];
                if (GetSingleInvestState(type, id) != 3)
                {
                    return false;
                }
            }
        }
        return true;
    }
    public struct InvestInfo
    {
        public int money;
        public int days;
        public int InvestBuyTime;    // 投资购买时间戳,永久的通过该时间判断是否有效或已过天数,任意类型均有该值,过期没有重置,前端自己判断
        public int InvestEndTime;    // 投资到期时间戳,非永久的通过该时间判断到期时间,有天数限制的才有值
        public int AwardState;    // 今日是否已领取奖励
    }
}
Main/System/Recharge/PrivilegeCardWin.cs
New file
@@ -0,0 +1,133 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//特权卡
public class PrivilegeCardWin : UIBase
{
    [SerializeField] GroupButtonEx djqBtn;
    [SerializeField] GroupButtonEx goldBtn;
    [SerializeField] ScrollerController djqScroller;
    [SerializeField] ScrollerController goldScroller;
    [SerializeField] Transform djqInfo;
    List<int> _list = new List<int>();
    protected override void InitComponent()
    {
        djqBtn.AddListener(() => { OnSelectFuncType(0); });
        goldBtn.AddListener(() => { OnSelectFuncType(1); });
    }
    protected override void OnPreOpen()
    {
        djqScroller.OnRefreshCell += OnDjqRefreshCell;
        goldScroller.OnRefreshCell += OnGoldRefreshCell;
        RechargeManager.Instance.rechargeCountEvent += RechargeEvent;
        if (RechargeManager.Instance.selectTabIndex == 0)
        {
            djqBtn.SelectBtn();
        }
        else if (RechargeManager.Instance.selectTabIndex == 1)
        {
            goldBtn.SelectBtn();
        }
        Display();
    }
    protected override void OnPreClose()
    {
        djqScroller.OnRefreshCell -= OnDjqRefreshCell;
        goldScroller.OnRefreshCell -= OnGoldRefreshCell;
        RechargeManager.Instance.rechargeCountEvent -= RechargeEvent;
    }
    void RechargeEvent(int id)
    {
        Display();
    }
    void Display()
    {
        CreateScroller();
    }
    void CreateScroller()
    {
        if (RechargeManager.Instance.selectTabIndex == 0)
        {
            _list = RechargeManager.Instance.GetCTGIDListByType(17);
            djqScroller.SetActive(true);
            djqInfo.SetActive(true);
            goldScroller.SetActive(false);
            if (djqScroller.GetCellTotalCount() == 0)
            {
                djqScroller.Refresh();
                for (int i = 0; i < _list.Count; i++)
                {
                    if (i % 3 == 0)
                    {
                        djqScroller.AddCell(ScrollerDataType.Header,i);
                    }
                }
                djqScroller.Restart();
            }
            else
            {
                djqScroller.m_Scorller.RefreshActiveCellViews();
            }
        }
        else if (RechargeManager.Instance.selectTabIndex == 1)
        {
            _list = RechargeManager.Instance.GetCTGIDListByType(2);
            djqScroller.SetActive(false);
            djqInfo.SetActive(false);
            goldScroller.SetActive(true);
            if (goldScroller.GetCellTotalCount() == 0)
            {
                goldScroller.Refresh();
                for (int i = 0; i < _list.Count; i++)
                {
                    if (i % 3 == 0)
                    {
                        goldScroller.AddCell(ScrollerDataType.Header, i);
                    }
                }
                goldScroller.Restart();
            }
            else
            {
                goldScroller.m_Scorller.RefreshActiveCellViews();
            }
        }
    }
    void OnDjqRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as RechargeDJQLineCell;
        _cell.Display(cell.index, _list);
    }
    void OnGoldRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as RechargeGoldLineCell;
        _cell.Display(cell.index, _list);
    }
    void OnSelectFuncType(int index)
    {
        RechargeManager.Instance.selectTabIndex = index;
        Display();
    }
}
Main/System/Recharge/PrivilegeCardWin.cs.meta
copy from Main/Config/Configs/InvestConfig.cs.meta copy to Main/System/Recharge/PrivilegeCardWin.cs.meta
File was copied from Main/Config/Configs/InvestConfig.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ff3d77591e2aeaa438955b2b6322cfba
guid: dfb43dd8cb814e24bba8dc559e1cb24d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Main/System/Redpoint/MainRedDot.cs
@@ -84,15 +84,6 @@
    #endregion
    #region 开服活动红点
    public const int REDPOINT_OPENSERVER = 209;
    public Redpoint openServerRedpoint = new Redpoint(REDPOINT_OPENSERVER);
    //280 开头用于节日祝福
    public const int RedPoint_HolidayWishes = 280;
    public Redpoint holidayWishesRedpoint = new Redpoint(RedPoint_HolidayWishes);
    #endregion
    public const int REDPOINT_OPENRANK = 258;
    public Redpoint openRankRedpoint = new Redpoint(REDPOINT_OPENRANK);
    #region 仙盟活动红点
Main/Utility/EnumHelper.cs
@@ -833,6 +833,7 @@
    Chat = 19,//聊天
    AutoFight = 20,//自动战斗
    Recharge = 22,//充值
    PrivilegeCard = 25, //特权卡
    Horse = 37,  //坐骑
    BattlePass = 40, //基金(战令)
    LLMJ = 41,  //历练秘笈