少年修仙传客户端代码仓库
hch
2 天以前 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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System;
using vnxbqy.UI;
 
public class ILDayOnlineModel : ILModel<ILDayOnlineModel>
{
 
    float recvTime; // 接收时的时间 用于计算时间差
    int seconds; //接收时的在线秒
 
    public event Action OnGetGiftUpdateEvent;
    int DayOnlineAwardState; //每日在线奖励
 
    public int[] timeArr;   //原时间列表
    public List<int> indexSort; //排序后的时间列表
    //索引从1开始
    public Dictionary<int, List<List<int>>> awards = new Dictionary<int, List<List<int>>>();
 
    protected override void Init()
    {
 
        TimeMgr.Instance.OnMinuteEvent += UpdateRedpoint;
 
    }
 
    public struct awardItem
    {
        public int itemID;
        public int itemCount;
    }
 
    protected override void UnInit()
    {
        TimeMgr.Instance.OnMinuteEvent -= UpdateRedpoint;
    }
 
    public void UpdateGetGift(IL_HB113_tagMCOnlinePrizeNew _package)
    {
 
        awards.Clear();
        int day = TimeUtility.CreateDays;
        if (OnlineAwardNewConfig.Has(0))
        {
            day = 0;
        }
        if (!OnlineAwardNewConfig.Has(day))
            return;
 
        var awardJson = JsonMapper.ToObject(OnlineAwardNewConfig.Get(day).Reward);
        foreach (var _key in awardJson.Keys)
        {
            List<List<int>> info = new List<List<int>>();
            var index = int.Parse(_key);
            awards.Add(index, info);
            for (int i = 0; i < awardJson[_key].Count; i++)
            {
                List<int> info2 = new List<int>();
                info.Add(info2);
                for (int j = 0; j < awardJson[_key][i].Count; j++)
                {
                    info2.Add(int.Parse(awardJson[_key][i][j].ToString()));
                }
            }
        }
 
        timeArr = JsonMapper.ToObject<int[]>(OnlineAwardNewConfig.Get(day).Time);
 
        recvTime = Time.realtimeSinceStartup;
        seconds = (int)_package.OnlineTime / 1000;
        if (_package.PrizeInfo.Length != 0)
            DayOnlineAwardState = (int)_package.PrizeInfo[0];
 
        SortIndexs();
        UpdateRedpoint();
        if (OnGetGiftUpdateEvent != null)
        {
            OnGetGiftUpdateEvent();
        }
    }
 
    //计时
    public string GetTimeStr()
    {
        return TimeUtility.SecondsToHMS(seconds + (int)(Time.realtimeSinceStartup - recvTime));
    }
 
    public int GetOnlineMinute()
    {
        return (seconds + (int)(Time.realtimeSinceStartup - recvTime)) / 60;
    }
 
 
    //0 可领取 1不可领取 2已领取
    public int GetAwardState(int index)
    {
        if ((DayOnlineAwardState & (1 << index)) != 0)
        {
            return 2;
        }
        if (GetOnlineMinute() < timeArr[index])
        {
            return 1;
        }
 
        return 0;
    }
 
 
    public void SortIndexs()
    {
        indexSort = new List<int>(timeArr);
        indexSort.Sort(compareEx);
    }
 
    //根据领奖情况排序
    private int compareEx(int x, int y)
    {
        int xindex = Array.IndexOf(timeArr, x);
        int yindex = Array.IndexOf(timeArr, y);
 
        int xresult = GetAwardState(xindex);
        int yresult = GetAwardState(yindex);
 
        if (xresult != yresult) return xresult.CompareTo(yresult);
 
        return xindex.CompareTo(yindex);
    }
 
    public Redpoint redpoint = new Redpoint(201, 201121);
    public void UpdateRedpoint()
    {
        if (timeArr == null)
            return;
        redpoint.state = RedPointState.None;
        for (int i = 0; i < timeArr.Length; i++)
        {
            if (GetAwardState(i) == 0)
            {
                redpoint.state = RedPointState.GetReward;
                break;
            }
        }
 
    }
 
    //未开启且 非指定天内 则关闭
    public bool IsOpen()
    {
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DayOnline))
            return false;
 
        if (OnlineAwardNewConfig.Has(0))
                return true;
 
        if (!OnlineAwardNewConfig.Has(TimeUtility.CreateDays))
            return false;
 
        return true;
    }
 
    public bool HasAwardGet()
    {
        return redpoint.state == RedPointState.GetReward;
    }
}