少年修仙传客户端代码仓库
hch
2025-04-03 c154ac0832fe4379a00d3e1cda700e7d2a7383c7
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
using LitJson;
using vnxbqy.UI;
using Spine;
using System;
using System.Collections.Generic;
using System.Linq;
 
public class BeastInvasionModel : Model
{
    public int[] bossNPCIDArr;                          //bossNPCID列表 [星期一NPCID, 星期二, ...]
    public Dictionary<int, int[][]> rewardDict;         //每日排行榜奖励 {"名次":[[物品ID,个数,是否拍品], ...], ...}
    public int[] rankArr;                               //排名数组(记录先后关系用)
    public int[] dropArr;                               //bossNPCID列表 [星期一NPCID, 星期二, ...]
    public int intervalS;                               //每日刷新点前后x秒不让挑战
    public readonly int rankType = 34;                  //异兽入侵榜单类型
    public readonly int rankMaxCount = 1000;            //每日排行最大条数
    public readonly int itemCellCount = 6;              //概率掉落展示最大格子数
    public readonly int dungeonID = 50100;              //副本总表ID
    public int dataMapID;                               //数据地图ID
    public int lineID;                                  //功能线路ID
    public int dayReKind;                               //每日重置类型
    public DateTime reflashTime;                        //每日刷新时间
    public List<int> itemCellList;
    public int boxNum = 0;                              //当前已获得奖励盒子数
    public float boxHurt = 0;                          //当前所在奖励盒子已经累计输出伤害
 
    RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    Redpoint mainRedPoint = new Redpoint(MainRedDot.BeastInvasionRedpoint);
    Redpoint redPoint = new Redpoint(MainRedDot.BeastInvasionRedpoint, MainRedDot.BeastInvasionRedpoint * 10 + 1);      //挑战红点
 
    public override void Init()
    {
        dungeonModel.dungeonRecordChangeEvent += OndungeonRecordChangeEvent;
        bossNPCIDArr = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("AlineInvade").Numerical1);
        var jsonData = JsonMapper.ToObject(FuncConfigConfig.Get("AlineInvade").Numerical2);
        List<string> keysList = jsonData.Keys.ToList();
        rankArr = new int[keysList.Count];
        rewardDict = new Dictionary<int, int[][]>();
        for (int i = 0; i < keysList.Count; i++)
        {
            string keyStr = keysList[i];
            int key = int.Parse(keyStr);
            int[][] value = JsonMapper.ToObject<int[][]>(jsonData[keyStr].ToJson());
            rewardDict[key] = value;
            rankArr[i] = key;
        }
        dropArr = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("AlineInvade").Numerical3);
        intervalS = int.Parse(FuncConfigConfig.Get("AlineInvade").Numerical4);
        itemCellList = new List<int>();
        dataMapID = DungeonConfig.Get(dungeonID).DataMapID;
        lineID = DungeonConfig.Get(dungeonID).LineID;
        dayReKind = DungeonOpenTimeConfig.Get(dataMapID).DayReKind;
 
        var nowTime = TimeUtility.ServerNow;
        if (dayReKind == 1)
        {
            reflashTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 0, 0, 0);
        }
        else if (dayReKind == 2)
        {
            reflashTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 5, 0, 0);
        }
        else
        {
            reflashTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 0, 0, 0);
        }
    }
 
    public override void UnInit()
    {
        dungeonModel.dungeonRecordChangeEvent -= OndungeonRecordChangeEvent;
 
    }
 
    private void OndungeonRecordChangeEvent(int dungeonId)
    {
        if (dungeonId != dataMapID)
            return;
        UpdateRedpoint();
    }
 
    void UpdateRedpoint()
    {
        redPoint.state = dungeonModel.GetEnterTimes(dataMapID) < dungeonModel.GetMaxTimesShow(dataMapID) ? RedPointState.Simple : RedPointState.None;
    }
 
    //当前时间能否进入副本
    public bool isTimeOk()
    {
        if (dayReKind == 0)
            return true;
        var nowTime = TimeUtility.ServerNow;
        var minTime = reflashTime.AddSeconds(-intervalS);
        var maxTime = reflashTime.AddSeconds(intervalS);
        if (nowTime >= minTime && nowTime <= maxTime)
            return false;
        return true;
    }
 
    public SortedDictionary<int, RankData> GetRankPageDatas()
    {
        Dictionary<int, RankData> rankPageDatas = rankModel.GetRankPageDatas(rankType);
        SortedDictionary<int, RankData> sortedDict = new SortedDictionary<int, RankData>(rankPageDatas);
        return sortedDict;
    }
 
    //获得副本剩余开放时间
    public string GetRemainTime()
    {
        var nowTime = TimeUtility.ServerNow;
        if (!isTimeOk())
        {
            return TimeUtility.SecondsToDHMS(0);
        }
        else
        {
            var minTime = reflashTime.AddSeconds(-intervalS);
            if (nowTime < minTime)
            {
                return TimeUtility.SecondsToDHMS((int)(minTime - nowTime).TotalSeconds);
            }
            else
            {
                DateTime newReflashTime = reflashTime.AddDays(1);
                var newMinTime = newReflashTime.AddSeconds(-intervalS);
                return TimeUtility.SecondsToDHMS((int)(newMinTime - nowTime).TotalSeconds);
            }
        }
    }
 
    //获得今日要打的NPCID 按星期x轮换,周一为每周开始的第一天
    //每日五点前是上一天的boss,5点后是当天boss
    //配一个每天都一样 不足7个每星期按配置的个数循环,周一开始重新循环
    public int GetTodayNPCID()
    {
        DateTime today = TimeUtility.ServerNow;
        int dayOfWeek = (int)today.DayOfWeek;
        int[] dayOfWeekByMonday = new int[] { 6, 0, 1, 2, 3, 4, 5 };
        int realDayOfWeek = dayOfWeekByMonday[dayOfWeek];
        int count = bossNPCIDArr.Length;
        //只配一个或者类型是不刷新 每天都一样 
        if (count == 1 || dayReKind == 0)
            return bossNPCIDArr[0];
        int index = realDayOfWeek % count;
        if (today >= reflashTime)
        {
            return bossNPCIDArr[index];
        }
        else
        {
            if (index == 0)
            {
                return bossNPCIDArr[count - 1];
            }
            else
            {
                return bossNPCIDArr[index - 1];
            }
        }
    }
 
    //获得当前排名的上一级排名,返回-1说明没有上一级排名
    public int GetLastRank(int rank)
    {
        if (rank <= 3)
            return -1;
        for (int i = 0; i < rankArr.Length; i++)
        {
            if (rankArr[i] == rank)
            {
                return rankArr[i - 1];
            }
        }
        return -1;
    }
 
    //获得第一名,第二名,第三名的对应图标
    public string GetRankImage(int rank)
    {
        switch (rank)
        {
            case 1:
                return "Rank_First";
            case 2:
                return "Rank_Second";
            case 3:
                return "Rank_Third";
            default:
                return string.Empty;
        }
    }
 
 
    public void UpdateBeastInvasionBoxInfo(string info)
    {
        var json = JsonMapper.ToObject<BeastInvasionBox>(info);
        if (json.dataMapID != 5010)
            return;
        boxNum = json.boxNum;
        boxHurt = json.boxHurt;
    }
}
public class BeastInvasionBox
{
    public int dataMapID;
    public int boxNum;
    public float boxHurt;
}