lcy
19 小时以前 11dbbeb220a366951cbcccb5b823b845b77e1b9d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using LitJson;
 
 
public class DungeonManager : GameSystemManager<DungeonManager>
{
    private Dictionary<int, FBInfo> fbInfoDict = new Dictionary<int, FBInfo>();
    public event Action<int> UpdateFBInfoListEvent;//int mapID
    Dictionary<int, DungeonRecord> dungeonRecords = new Dictionary<int, DungeonRecord>();
    public event Action updateDungeonBuyCnt;
 
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
    }
 
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
    }
 
    public void OnBeforePlayerDataInitializeEvent()
    {
        fbInfoDict.Clear();
    }
 
    public bool TryGetFBInfoByMapID(int mapID, out FBInfo info)
    {
        return fbInfoDict.TryGetValue(mapID, out info);
    }
 
    //获得副本的最大次数和剩余可用次数
    
    //maxCount 最大次数:可能会因各个副本展示规则不同而不同
    //            默认为从功能操作归属出发购买次数属于每日上限次数 每日次数 + 可最大购买次数 + 特权次数
    //useCount 剩余可用次数:今日总的可用次数 - 今日已进入次数
    //          今日总的可用次数:每日次数 + 可购总买次数 + 广告次数 + 道具次数 + 特权次数
    //          默认为从功能操作归属出发购买次数属于可用次数内
    public bool TryGetDungeonCount(int dataMapID, out int maxCount, out int useCount)
    {
        maxCount = 0;
        useCount = 0;
        if (!TryGetFBInfoByMapID(dataMapID, out FBInfo fbInfo))
            return false;
            
        DungeonOpenTimeConfig dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(dataMapID);
        if (dungeonOpenTimeConfig == null)
        {
            return false;
        }
        //总的可用次数:每日次数 + 可购总买次数 + 广告次数 + 道具次数 + 特权次数
        int totalCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax + InvestModel.Instance.GetAddFBBuyCount(dataMapID) + fbInfo.ADAddCnt + fbInfo.ItemAddCnt;
        maxCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax + InvestModel.Instance.GetAddFBBuyCount(dataMapID);
        useCount = totalCount - fbInfo.EnterCnt;
 
        return true;
    }
 
    public void UpdateFBInfoList(HA320_tagSCFBInfoList vNetData)
    {
        if (vNetData == null || vNetData.FBDataList.IsNullOrEmpty())
            return;
        bool isADAddCntChange = false;
        bool isBuyAddCntChange = false;
        bool isItemAddCntChange = false;
 
        foreach (var item in vNetData.FBDataList)
        {
            if (!fbInfoDict.ContainsKey((int)item.MapID))
                fbInfoDict[(int)item.MapID] = new FBInfo();
            int mapID = (int)item.MapID;
            fbInfoDict[mapID].MapID = item.MapID;
            fbInfoDict[mapID].EnterCnt = item.EnterCnt;
 
            isADAddCntChange = fbInfoDict[mapID].ADAddCnt != item.ADAddCnt;
            fbInfoDict[mapID].ADAddCnt = item.ADAddCnt;
 
            isBuyAddCntChange = fbInfoDict[mapID].BuyAddCnt != item.BuyAddCnt;
            fbInfoDict[mapID].BuyAddCnt = item.BuyAddCnt;
 
            isItemAddCntChange = fbInfoDict[mapID].ItemAddCnt != item.ItemAddCnt;
            fbInfoDict[mapID].ItemAddCnt = item.ItemAddCnt;
 
            fbInfoDict[mapID].PassLineID = item.PassLineID;
            fbInfoDict[mapID].PassGradeCnt = item.PassGradeCnt;
            fbInfoDict[mapID].PassGrade = item.PassGrade;
 
            UpdateFBInfoListEvent?.Invoke(mapID);
        }
    }
 
    public void UpdateRecords(HA3BD_tagMCBuyEnterInfo.tagMCBuyInfo[] vNetDatas)
    {
        for (int i = 0; i < vNetDatas.Length; i++)
        {
            var info = vNetDatas[i];
            var dungeonId = (int)info.FBID;
            if (dungeonRecords.ContainsKey(dungeonId))
            {
                dungeonRecords[dungeonId].UpdateRecord(info);
            }
            else
            {
                dungeonRecords[dungeonId] = new DungeonRecord(info);
            }
        }
        if (updateDungeonBuyCnt != null)
        {
            updateDungeonBuyCnt();
        }
    }
 
 
 
}
 
public class FBInfo
{
    public uint MapID;
    public ushort EnterCnt;        //今日累计进入次数
    public byte ADAddCnt;        //广告增加次数
    public byte BuyAddCnt;        //购买增加次数
    public ushort ItemAddCnt;        //物品增加次数
    public uint PassLineID;        //已过关到的lineID
    public byte PassGradeCnt;        //星级值对应个数, 每个key存9个lineID
    public uint[] PassGrade;        //副本线路对应星级值列表
}