少年修仙传客户端代码仓库
hch
3 天以前 600733c8f592cb9e65f2b7a3e110ac1d686e6bfe
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
using System;
using System.Collections;
using System.Collections.Generic;
 
//排行榜
public class ArenaRankModel : ILModel<ArenaRankModel>
{
    //更新用户排名信息
    public event Action<uint, int> UpdateUserRankEvent;
    //根据type ,查询数据
    Dictionary<int, List<RankPageData>> m_RankDatas = new Dictionary<int, List<RankPageData>>();
    //根据type ,查询时间列表
    Dictionary<int, List<SearchPageData>> m_SearchTimes = new Dictionary<int, List<SearchPageData>>();
 
    public event Action<int, int> onRankRefresh;
    public int myOldRank = 0;
    protected override void Init()
    {
    }
    protected override void UnInit()
    {
    }
 
    //接收排名
    public void ReceiveBillboardData(HA9A2_tagPYBillboardData vNetData)
    {
        if (vNetData.Type != 28)
            return;
        if (vNetData.WatchID != 0)
        {//竞技场 获取当前排名
            if (UpdateUserRankEvent != null)
            {
                int index = -1;
                if (vNetData.BillboardCount == 0)
                {
                    index = -1;
                }
                else
                {
                    for (int i = 0; i < vNetData.BillboardCount; i++)
                    {
                        if (vNetData.Billboard[i].ID == PlayerDatas.Instance.baseData.PlayerID)
                        {
                            index = (int)vNetData.Billboard[i].OrderIndex + 1;
                        }
                    }
                }
                UpdateUserRankEvent(vNetData.Type, index);
                SetMyRank(vNetData.Type, index);
            }
        }
        else
        {//分页数据
            if (vNetData.BillboardCount == 0)
                return;
            ReceivePackage(vNetData);
        }
    }
    //获得自己的排名
    public int GetMyRank(int type)
    {
        List<SearchPageData> searchDatas = null;
        m_SearchTimes.TryGetValue(type, out searchDatas);
        if (searchDatas == null)
            return 0;
        return searchDatas[0].count;
    }
 
    //设置自己的排名
    public void SetMyRank(int type, int index)
    {
        //UnityEngine.Debug.Log("SetMyRank:" + type);
        List<SearchPageData> searchDatas = null;
        m_SearchTimes.TryGetValue(type, out searchDatas);
        if (searchDatas != null)
        {
            myOldRank = searchDatas[0].count;
            searchDatas[0].count = index;
        }
 
    }
 
    //获得id
    public bool TryGetRanks(int type, out List<RankPageData> ranks)
    {
        return m_RankDatas.TryGetValue(type, out ranks);
    }
    public void ClearSearchData()
    {
        //m_SearchTimes.Clear();
    }
    //获得id
    public int TryGetRankCount(int type)
    {
        List<RankPageData> ranks = null;
        m_RankDatas.TryGetValue(type, out ranks);
        return ranks.Count;
    }
    //竞技场  排名
    public void SendArenaWatchBillboard(uint startIndex, byte isSelf, byte count, byte type = 28)
    {
        int index = -2;
        if (isSelf == 1)
        {
            index = -1;
        }
        else
        {
            index = (int)startIndex;
        }
 
        List<SearchPageData> searchDatas = null;
        if (!m_SearchTimes.TryGetValue(type, out searchDatas))
        {
            searchDatas = new List<SearchPageData>();
            m_SearchTimes.Add(type, searchDatas);
        }
        //查询是否发同样类型的数据
        int currentIndex = -1;
        for (int i = 0; i < searchDatas.Count; i++)
        {
            if (index == searchDatas[i].startIndex)
                currentIndex = i;
        }
        ///
        bool isSend = false;
        if (currentIndex == -1)
        {
            SearchPageData data = new SearchPageData();
            data.startIndex = index;
            data.times = TimeUtility.AllSeconds;               //时间
            data.count = count;
            data.isEnd = false;
            searchDatas.Add(data);
            isSend = true;
            currentIndex = searchDatas.Count - 1;
        }
        else
        {
            int diff = TimeUtility.AllSeconds - searchDatas[currentIndex].times;
            //UnityEngine.Debug.Log("diff:" + diff + "    " + TimeUtility.AllSeconds);
            int CDtime = int.Parse(FuncConfigConfig.Get("ArenaLVSet").Numerical3);
 
            //if (diff < CDtime || searchDatas[currentIndex].isEnd)
            if (diff < CDtime)
            {
                isSend = false;
            }
            else
            {
                isSend = true;
            }
        }
        if (isSelf == 1)
            isSend = true;
        if (isSend)
        {
            CA9A2_tagCPYWatchBillboard pack = new CA9A2_tagCPYWatchBillboard();
            pack.Type = type;//28代表竞技场
            pack.StartIndex = startIndex;
            pack.WatchCnt = count;
            pack.WatchID = isSelf == 1 ? PlayerDatas.Instance.baseData.PlayerID : 0;
            GameNetSystem.Instance.SendInfo(pack);
 
            //更新查询时间
            searchDatas[currentIndex].times = TimeUtility.AllSeconds;
        }
    }
 
 
    //分页查询 =====================================================
    public void ReceivePackage(HA9A2_tagPYBillboardData package)
    {
        if (package.Type != 28)
            return;
        ///判读是否到最后一条
        List<SearchPageData> searchDatas = null;
        m_SearchTimes.TryGetValue(package.Type, out searchDatas);
        int searchindex = -1;
        for (int i = 0; i < searchDatas.Count; i++)
        {
            if (package.Billboard[0].OrderIndex == searchDatas[i].startIndex)
                searchindex = i;
        }
        //if (package.BillboardCount != searchDatas[searchindex].count)
        //    searchDatas[searchindex].isEnd = true;
        ////////////////////////////////////////////////////////////////////////        
        List<RankPageData> rankDatas = null;
        if (!m_RankDatas.TryGetValue(package.Type, out rankDatas))
        {
            rankDatas = new List<RankPageData>();
            m_RankDatas.Add(package.Type, rankDatas);
        }
        ///对查询到的数据进行添加或覆盖
        for (int i = 0; i < package.BillboardCount; i++)
        {
            if (package.Billboard[i].OrderIndex < rankDatas.Count)
            {
                rankDatas[i].type = package.Type;
                ReSetRankData(rankDatas[(int)package.Billboard[i].OrderIndex], package.Billboard[i]);
            }
            else
            {
                var rankData = new RankPageData();
                rankData.type = package.Type;
                ReSetRankData(rankData, package.Billboard[i]);
                rankDatas.Add(rankData);
            }
        }
 
        if (onRankRefresh != null)
        {
            onRankRefresh(package.Type, (int)package.WatchID);
        }
    }
 
    void ReSetRankData(RankPageData data, HA9A2_tagPYBillboardData.tagPYBillboardInfo serverData)
    {
        data.orderIndex = serverData.OrderIndex;
        data.id = serverData.ID;
        data.id2 = serverData.ID2;
        data.name1 = serverData.Name1.Trim().Replace("\0", "");
        data.name2 = serverData.Name2.Trim().Replace("\0", "");
        data.subType = serverData.Type2;
        data.value1 = serverData.Value1;
        data.value2 = serverData.Value2;
        data.cmpValue = serverData.CmpValue;
        data.cmpValue2 = serverData.CmpValue2;
        data.cmpValue3 = serverData.CmpValue3;
    }
 
 
    static void OnGetRankPageData(RankPageData data)
    {
 
    }
 
    static void OnReleaseRankPageData(RankPageData data)
    {
 
    }
}
public class RankPageData
{
    public int type;
    public uint orderIndex;        //名次索引,0代表第一名
    public uint id;
    public uint id2;
    public string name1;        //名字1,用来显示排序对象名字 
    public string name2;        //名字2
    public byte subType;        //附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    public uint value1;        //排序依赖的值,比如,等级
    public uint value2;        //排序依赖的值,比如,战斗力
    public uint cmpValue;        // 比较权值
    public uint cmpValue2;        // 比较权值
    public uint cmpValue3;        // 比较权值
}
public class SearchPageData
{
    public int type;                    //类型,28代表排行榜
    public int startIndex;        //名次索引,-1代表查自己的成绩
    public int times;               //时间
    public int count;
    public bool isEnd;              //结尾
}