using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class BlessLVManager : GameSystemManager { 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_Energy; // 当前累计充能次数 public int m_EnergyTimeLast; // 上次获得充能次数时间戳 public event Action OnBlessLVUpdateEvent; int m_LVPackTime; //收包时间用于计算剩余时间m_LVUPRemainTime public int upgradeTreeMoneyType; //升级仙树消耗的货币类型 public int timeUpTreeItemID; //加速仙树升级的道具ID public int timeUpTreeItemSubTime; //减少仙树升级时间的道具减少的时间 int freeEnergyMax; //充能次数上限,特权额外次数在 InvestPower 配置 public int freeEnergyCD; //充能CD,分钟,x分钟获得1个能量 public int freeEnergySubTreeTime; //领取充能奖励减少祝福升级时间 分钟 public int freeEnergyMoneyType; //可消耗货币领取充能奖励, 货币类型|货币值,也可广告领取,二选一 public int freeEnergyMoney; public int lastTreeLV; //上一次树的等级 用于打开界面的时候播放下升级特效 public override void Init() { 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; ParseConfig(); } public override void Release() { DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOK; GlobalTimeEvent.Instance.fiveSecondEvent -= OnTimeEvent; } void OnPlayerLoginOK() { lastTreeLV = 0; AutoUpgrade(); UpdateTreeRedpoint(); } void ParseConfig() { var config = FuncConfigConfig.Get("TreeLVUP"); upgradeTreeMoneyType = int.Parse(config.Numerical1); var arr = config.Numerical2.Split('|'); timeUpTreeItemID = int.Parse(arr[0]); timeUpTreeItemSubTime = int.Parse(arr[1]); 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) { m_TreeLV = netPack.TreeLV; m_LVUPState = netPack.LVUPState; m_LVUPRemainTime = (int)netPack.LVUPRemainTime; m_Energy = netPack.Energy; m_EnergyTimeLast = (int)netPack.EnergyTimeLast; m_LVPackTime = TimeUtility.AllSeconds; if (lastTreeLV == 0) { lastTreeLV = m_TreeLV; } OnBlessLVUpdateEvent?.Invoke(); UpdateTreeRedpoint(); AutoUpgrade(); } public int GetLVUPRemainTime() { if (m_LVUPState == 0) return 0; return m_LVUPRemainTime - (TimeUtility.AllSeconds - m_LVPackTime); } public int GetMaxEnergyCnt() { return freeEnergyMax + InvestModel.Instance.GetBlessAddEnergyMax(); } //充能时间倒计时, 用于客户端主动领取 或者 只有从0到1才显示用 public int GetFreeRemainTime() { return freeEnergyCD * 60 - (TimeUtility.AllSeconds - m_EnergyTimeLast); } Redpoint redpointTree = new Redpoint(MainRedDot.BlessLVRedpoint); Redpoint redpointTreeItem = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10); Redpoint redpointTreeFree = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10 + 1); void UpdateTreeRedpoint() { redpointTreeFree.state = RedPointState.None; redpointTreeItem.state = RedPointState.None; redpointTree.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlessLV)) { return; } var config = TreeLVConfig.Get(m_TreeLV); if (config == null) return; //非升级中检查升级材料 if (m_LVUPState == 0) { if (UIHelper.GetMoneyCnt(upgradeTreeMoneyType) >= config.LVUPNeedMoney) { redpointTree.state = RedPointState.Simple; } } else { //检查时间道具 和 免费的时间 if (PackManager.Instance.GetSinglePack(PackType.Item).HasItem(timeUpTreeItemID)) { redpointTreeItem.state = RedPointState.Simple; } if (m_Energy > 0) { redpointTreeFree.state = RedPointState.Simple; } } } public void AutoUpgrade() { //时间结束自动通知服务端升级,或者打开界面时,或者上线 都做检查 if (m_LVUPState == 0) { return; } if (GetLVUPRemainTime() > 0) { return; } var pack = new CB223_tagCMTreeLVUP(); pack.Type = 1; GameNetSystem.Instance.SendInfo(pack); } void OnTimeEvent() { //升级中检查 倒计时结束;非升级中检查免费次数时间 红点 if (m_LVUPState == 1) { //升级 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() { var rateList = TreeLVConfig.Get(m_TreeLV).EquipColorRateList; for (int i = 0; i < rateList.Length; i++) { if (rateList[i] != 0) return i + 1; } return 1; } }