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 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 itemCellList; public int boxNum = 0; //当前已获得奖励盒子数 public float boxHurt = 0; //当前所在奖励盒子已经累计输出伤害 RankModel rankModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } 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(FuncConfigConfig.Get("AlineInvade").Numerical1); var jsonData = JsonMapper.ToObject(FuncConfigConfig.Get("AlineInvade").Numerical2); List keysList = jsonData.Keys.ToList(); rankArr = new int[keysList.Count]; rewardDict = new Dictionary(); for (int i = 0; i < keysList.Count; i++) { string keyStr = keysList[i]; int key = int.Parse(keyStr); int[][] value = JsonMapper.ToObject(jsonData[keyStr].ToJson()); rewardDict[key] = value; rankArr[i] = key; } dropArr = JsonMapper.ToObject(FuncConfigConfig.Get("AlineInvade").Numerical3); intervalS = int.Parse(FuncConfigConfig.Get("AlineInvade").Numerical4); itemCellList = new List(); 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 GetRankPageDatas() { Dictionary rankPageDatas = rankModel.GetRankPageDatas(rankType); SortedDictionary sortedDict = new SortedDictionary(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(info); if (json.dataMapID != 5010) return; boxNum = json.boxNum; boxHurt = json.boxHurt; } } public class BeastInvasionBox { public int dataMapID; public int boxNum; public float boxHurt; }