using System; using System.Collections.Generic; using ET; using UnityEngine; using FairyGUI; namespace GFGGame { public class ArenaDataManager : SingletonBase { public List ThemeList = new List() { 1, 2, 3 };//本周主题列表 public string Tag = "异域";//本周标签 public int SeasonId = 1;// 赛季id public int Grade = 1;//本赛季段位 public int Rank = 10000;//本赛季段位内排名 public int HighestGrade = 1;//本赛季最高段位 public int HighestRank = 10000; //本赛最高季段位内排名 public List DressupList = new List();//我的搭配列表 public List Targets = new List();//对手 public ArenaTargetData SelfData;//自己的排行榜信息 public ArenaTargetData SelfLastData;//自己的上赛季排行榜信息 public Dictionary> RankDatasDic = new Dictionary>();//排行榜数据 public List HistoryDatas = new List();//获取竞技场历史记录 /*************************************************************************************************************************************/ public Dictionary TextureDic = new Dictionary(); public List roundTime = new List(); public List targetRoundTime = new List(); //Dictionary<回合下标, Dictionary>>> public Dictionary>>> vaildSkills = new Dictionary>>>(); public Dictionary>>> targetVaildSkills = new Dictionary>>>(); public int SelectThemeIndex = 0;//当前选中换装主题(ThemeList)的下标 public int SelectTargetIndex = -1;//当前选中挑战对象的下标 public int CurFightIndex = 0;//当前挑战场次下标 public List myScore = new List();//对战数据,三轮分数 public List targetScore = new List();//对战数据,三轮分数 public List myFightScore = new List();//对战数据,竞技场战力,搭配战力,卓越点击战力,卡牌战力 public List targetFightScore = new List();//对战数据,对手竞技场战力,搭配战力,卓越点击战力,卡牌战力 /*************************************************************************************************************************************/ public int LastGrade;//战斗前段位 public int LastRank;//战斗前排行 public OtherRoleInfoData LastTargetInfo = new OtherRoleInfoData();//战斗对手角色信息 public int RewardId;//段位提升奖励 public List BonusList;//战斗结算奖励 /*************************************************************************************************************************************/ /// /// 是否快速挑战 /// /// public bool QuickFight { get { return StorageDataManager.Instance.GetStorageValue(ConstStorageId.ARENA_QUICK_FIGHT) == 1 ? true : false; } set { StorageSProxy.ReqSetClientValue(ConstStorageId.ARENA_QUICK_FIGHT, value == true ? 1 : 0).Coroutine(); } } public void Clear() { DressupList.Clear(); Targets.Clear(); RankDatasDic.Clear(); HistoryDatas.Clear(); TextureDic.Clear(); myScore.Clear(); targetScore.Clear(); myFightScore.Clear(); targetFightScore.Clear(); roundTime.Clear(); targetRoundTime.Clear(); // LastTargetInfo = null; SelfData = null; SelfLastData = null; } /// /// 是否结算中 /// /// public bool IsArenaClearing { get { long curTime = TimeHelper.ServerNow(); long startTime = TimeUtil.GetCurWeekTime(GlobalCfgArray.globalCfg.clearingStartWeekDay, GlobalCfgArray.globalCfg.clearingStartTime); long endTime = TimeUtil.GetCurWeekTime(GlobalCfgArray.globalCfg.clearingEndWeekDay, GlobalCfgArray.globalCfg.clearingEndTime); if (GlobalCfgArray.globalCfg.clearingEndWeekDay >= GlobalCfgArray.globalCfg.clearingStartWeekDay) { //结算时间开始到结束未跨周(例:本周六开始,本周日结束) return curTime >= startTime && curTime <= endTime; } else { //结算时间开始到结束跨周(例:本周六开始,下周一结束) return curTime <= endTime || curTime >= startTime; } } } /// /// 试图更新最高段位、排行数据 /// public void TryUpdateHighest() { HighestGrade = HighestGrade >= Grade ? HighestGrade : Grade; HighestRank = HighestRank >= Rank ? HighestRank : Rank; } //获取竞技场对手角色战斗数据 public FightData GetArenaFightData(int index, ArenaTargetData arenaTarget) { return arenaTarget.FightDatas[index]; } // //获取竞技场对手角色战斗数据 // public FightRoleData GetArenaRoleData(int index, ArenaTargetData arenaTarget) // { // return arenaTarget.RoleDressupList[index]; // } // //获取竞技场机器人战斗数据 // public FightRobotData GetArenaRobotData(int index, ArenaTargetData arenaTarget) // { // return arenaTarget.RobotDressupList[index]; // } /// /// 获取推荐卡牌 /// public int GetRecommentCardId(int scoreType, List itemList) { List cardDatas = FightDataManager.Instance.SortCardList(CardDataManager.GetCardListByRarity(0), itemList, scoreType); int cardId = 0; for (int j = 0; j < cardDatas.Count; j++) { bool isSame = false; for (int k = 0; k < ArenaDataManager.Instance.ThemeList.Count; k++) { FightData roleData = ArenaDataManager.Instance.DressupList[k]; if (cardDatas[j].id == roleData.cardId) { isSame = true; break; } } if (isSame == false) { cardId = cardDatas[j].id; break; } } return cardId; } /// /// 获取推荐列表 /// /// /// /// public List GetRecommentItemList(int scoreType, string[] tags) { Dictionary> itemListDic = new Dictionary>(); Dictionary> itemDatasDic = DressUpMenuItemDataManager.ItemDatasBySubTypeDic; foreach (int subType in itemDatasDic.Keys) { int key = subType; if (itemDatasDic.Count == 0) continue; if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(subType)) continue; List dressList = SortDressList(itemDatasDic[subType], scoreType, tags); int max = subType == (int)ConstDressUpItemType.TE_SHU ? 3 : 1; max = Math.Min(max, dressList.Count); if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsTypeBySubType(subType)) { key = ConstDressUpItemType.TE_SHU;//饰品全放在一个列表里 } if (!itemListDic.ContainsKey(key)) { itemListDic[key] = new List(); } itemListDic[key].AddRange(dressList.GetRange(0, max)); } if (itemListDic.ContainsKey(ConstDressUpItemType.LIAN_YI_QUN) && (!itemListDic.ContainsKey(ConstDressUpItemType.SHANG_YI) || !itemListDic.ContainsKey(ConstDressUpItemType.XIA_ZHUANG) || !itemListDic.ContainsKey(ConstDressUpItemType.NEI_DA))) { itemListDic.Remove(ConstDressUpItemType.SHANG_YI); itemListDic.Remove(ConstDressUpItemType.XIA_ZHUANG); itemListDic.Remove(ConstDressUpItemType.NEI_DA); } else if (!itemListDic.ContainsKey(ConstDressUpItemType.LIAN_YI_QUN) && (itemListDic.ContainsKey(ConstDressUpItemType.SHANG_YI) && itemListDic.ContainsKey(ConstDressUpItemType.XIA_ZHUANG) && itemListDic.ContainsKey(ConstDressUpItemType.NEI_DA))) { itemListDic.Remove(ConstDressUpItemType.LIAN_YI_QUN); } if (itemListDic.ContainsKey(ConstDressUpItemType.LIAN_YI_QUN) && itemListDic.ContainsKey(ConstDressUpItemType.SHANG_YI) && itemListDic.ContainsKey(ConstDressUpItemType.XIA_ZHUANG) && itemListDic.ContainsKey(ConstDressUpItemType.NEI_DA)) { bool hasTagLYQ = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.LIAN_YI_QUN][0], tags); bool hasTagSY = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.SHANG_YI][0], tags); bool hasTagXZ = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.XIA_ZHUANG][0], tags); bool hasTagND = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.NEI_DA][0], tags); if (hasTagLYQ && !hasTagSY && !hasTagXZ) { itemListDic.Remove(ConstDressUpItemType.SHANG_YI); itemListDic.Remove(ConstDressUpItemType.XIA_ZHUANG); itemListDic.Remove(ConstDressUpItemType.NEI_DA); } else if (!hasTagLYQ && (hasTagSY || hasTagXZ)) { itemListDic.Remove(ConstDressUpItemType.LIAN_YI_QUN); } else { int scoreLYQ = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.LIAN_YI_QUN][0], scoreType, tags); int scoreSY = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.SHANG_YI][0], scoreType, tags); int scoreXZ = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.XIA_ZHUANG][0], scoreType, tags); int scoreND = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.NEI_DA][0], scoreType, tags); if (scoreLYQ > scoreSY + scoreXZ + scoreND) { itemListDic.Remove(ConstDressUpItemType.SHANG_YI); itemListDic.Remove(ConstDressUpItemType.XIA_ZHUANG); itemListDic.Remove(ConstDressUpItemType.NEI_DA); } else { itemListDic.Remove(ConstDressUpItemType.LIAN_YI_QUN); } } } ET.Log.Debug("scoreType:" + scoreType); List itemList = new List(); foreach (int subType in itemListDic.Keys) { ET.Log.Debug("subType:" + subType + " item:" + itemListDic[subType]); DressUpMenuItemDataManager.SortItemListByHighScore(itemListDic[subType]); if (subType == ConstDressUpItemType.TE_SHU) { int max = Math.Min(itemListDic[subType].Count, 5); itemList.AddRange(itemListDic[subType].GetRange(0, max)); } else { itemList.AddRange(itemListDic[subType]); } } // ET.Log.Debug("itemList:" + itemList); return itemList; } private List SortDressList(List dressList, int scoreType, string[] tags) { dressList.Sort((int a, int b) => { ItemCfg cfgA = ItemCfgArray.Instance.GetCfg(a); ItemCfg cfgB = ItemCfgArray.Instance.GetCfg(b); if (ItemDataManager.CheckItemTagsRight(a, tags)) return -1; if (ItemDataManager.CheckItemTagsRight(b, tags)) return 1; int scoreA = ItemDataManager.GetItemAdditionScore(a, scoreType, tags); int scoreB = ItemDataManager.GetItemAdditionScore(b, scoreType, tags); return scoreB - scoreA; }); return dressList; } /// /// 获取符合标签的服装总个数 /// /// 服装列表 /// 标签 /// public int GetTagsCount(List itemList, string[] tags) { int count = 0; for (int i = 0; i < itemList.Count; i++) { if (ItemDataManager.CheckItemTagsRight(itemList[i], tags)) { if (ItemUtilCS.GetItemSubType(itemList[i]) == ConstDressUpItemType.LIAN_YI_QUN) { count += 3; } { count++; } } } return count; } /*********************************************************************************************************************/ public void SetMineFightAttr() { for (int i = 0; i < DressupList.Count; i++) { FightData fightData = DressupList[i]; fightData.cardScore = ItemDataManager.GetItemAdditionScore(fightData.cardId, ThemeList[i], fightData.tags); fightData.skillLvs = SkillDataManager.Instance.GetSkillLvs(fightData.cardId); FightDataManager.Instance.SetItemScoreList(fightData); } } /// /// 获取三套服装总战力 /// /// /// /// /// public long GetAllFightScore(List fightScores) { long fightScore = 0; for (int i = 0; i < fightScores.Count; i++) { fightScore += fightScores[i]; } return fightScore; } public long GetAllFightScore(List roleDatas) { long fightScore = 0; List fightScoreDatas = GetFightScoreList(roleDatas); for (int i = 0; i < fightScoreDatas.Count; i++) { fightScore += fightScoreDatas[i]; } return fightScore; } /// /// index=0:搭配战力 /// index=1:卓越点击战力 /// index=2:卡牌战力/技能战力 /// /// /// /// /// public List GetFightScoreList(List fightDatas) { List fightScoreDatas = new List(); long itemSum = 0; long clickScore = 0; long skillScore = 0; for (int i = 0; i < ThemeList.Count; i++) { if (fightDatas[i].type == FightTargetType.PLAYER) { itemSum += GetItemScoreSum(fightDatas[i].itemScoreList); clickScore += GetPerfectClickScore(fightDatas[i]) / (long)ConstScoreSystem.PART_SCORE; skillScore += FightDataManager.Instance.GetSkillFightScore(itemSum, fightDatas[i].baseScore, fightDatas[i].cardId, fightDatas[i].cardScore, fightDatas[i].skillLvs); } else { itemSum += GetItemScoreSum(fightDatas[i].itemScoreList); clickScore += GetRobotPerfectClickScore(fightDatas[i]) / (long)ConstScoreSystem.PART_SCORE; skillScore += FightDataManager.Instance.GetSkillFightScore(itemSum, fightDatas[i].baseScore, fightDatas[i].cardId, fightDatas[i].cardScore, fightDatas[i].skillLvs); } } fightScoreDatas.Add(itemSum); fightScoreDatas.Add(clickScore); fightScoreDatas.Add(skillScore); return fightScoreDatas; } /// /// 所有部件主属性和 /// /// public long GetItemScoreSum(List itemScoreList) { long scoreSum = 0; for (int i = 0; i < itemScoreList.Count; i++) { scoreSum += (long)itemScoreList[i]; } return scoreSum; } //玩家卓越点击战力 private long GetPerfectClickScore(FightData roleData) { long clickScore = 0; foreach (int key in roleData.pardScoreListDic.Keys) { clickScore += (long)ScoreSystemData.Instance.GetPartScore(roleData, key, ClickType.PREFACT_CLICK, 0); } return clickScore; } //机器人卓越点击战力 private long GetRobotPerfectClickScore(FightData robotData) { long clickScore = 0; FightScoreCfg[] scoreCfg = FightScoreCfgArray.Instance.dataArray; for (int i = 0; i < scoreCfg.Length; i++) { clickScore += (long)ScoreSystemData.Instance.GetRobotPartScore(robotData, i + 1, ClickType.PREFACT_CLICK, 0); } return clickScore; } /************************************************************************************************************/ public void SetTestInfo() { Targets.Add(ArenaSproxy.GetArenaTargetData(GetArenaTargetProto())); Targets[0].FightDatas[0].cardId = 2000009; Targets[0].FightDatas[0].cardScore = 100; Targets[0].FightDatas[0].skillLvs = new List() { 1, 1, 1 }; Targets[0].FightDatas[0].type = FightTargetType.PLAYER; Targets[0].FightDatas[0].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[0].FightDatas[1].cardId = 2000009; Targets[0].FightDatas[1].cardScore = 100; Targets[0].FightDatas[1].skillLvs = new List() { 1, 1, 1 }; Targets[0].FightDatas[1].type = FightTargetType.PLAYER; Targets[0].FightDatas[1].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[0].FightDatas[2].cardId = 2000009; Targets[0].FightDatas[2].cardScore = 100; Targets[0].FightDatas[2].skillLvs = new List() { 1, 1, 1 }; Targets[0].FightDatas[2].type = FightTargetType.PLAYER; Targets[0].FightDatas[2].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets.Add(ArenaSproxy.GetArenaTargetData(GetArenaTargetProto())); Targets[1].FightDatas[0].cardId = 2000009; Targets[1].FightDatas[0].cardScore = 100; Targets[1].FightDatas[0].skillLvs = new List() { 1, 1, 1 }; Targets[1].FightDatas[0].type = FightTargetType.PLAYER; Targets[1].FightDatas[0].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[1].FightDatas[1].cardId = 2000009; Targets[1].FightDatas[1].cardScore = 100; Targets[1].FightDatas[1].skillLvs = new List() { 1, 1, 1 }; Targets[1].FightDatas[1].type = FightTargetType.PLAYER; Targets[1].FightDatas[1].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[1].FightDatas[2].cardId = 2000009; Targets[1].FightDatas[2].cardScore = 100; Targets[1].FightDatas[2].skillLvs = new List() { 1, 1, 1 }; Targets[1].FightDatas[2].type = FightTargetType.PLAYER; Targets[1].FightDatas[2].itemScoreList = new List() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets.Add(ArenaSproxy.GetArenaTargetData(GetArenaTargetProto1())); Targets[2].FightDatas[0] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0); Targets[2].FightDatas[1] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0); Targets[2].FightDatas[2] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0); DressupList.Add(new FightData()); DressupList[0].tags = new string[] { Tag }; DressupList[0].type = FightTargetType.PLAYER; DressupList.Add(new FightData()); DressupList[1].type = FightTargetType.PLAYER; DressupList.Add(new FightData()); DressupList[2].type = FightTargetType.PLAYER; // DressupList[0].skillLvs = new List() { 1, 1, 1 }; // DressupList[1].skillLvs = new List() { 1, 1, 1 }; // DressupList[2].skillLvs = new List() { 1, 1, 1 }; } private ArenaTargetProto GetArenaTargetProto() { ArenaTargetProto proto = new ArenaTargetProto(); proto.Grade = 1; proto.RankInGrade = 10000; proto.Type = FightTargetType.PLAYER; proto.RoleInfo = new OtherRoleInfoProto(); proto.RoleInfo.RoleName = "玩家"; proto.RoleInfo.HeadItemId = 5000002; proto.RoleInfo.RoleLvl = 10; ArenaDressupProto dressupProto0 = new ArenaDressupProto(); dressupProto0.CardId = 2000009; dressupProto0.EquipIds = new List(SuitCfgArray.Instance.GetCfg(201005).partsArr); proto.PlayerDressupList.Add(dressupProto0); ArenaDressupProto dressupProto1 = new ArenaDressupProto(); dressupProto1.CardId = 2000010; dressupProto1.EquipIds = new List(SuitCfgArray.Instance.GetCfg(201006).partsArr); proto.PlayerDressupList.Add(dressupProto1); ArenaDressupProto dressupProto2 = new ArenaDressupProto(); dressupProto2.CardId = 2000011; dressupProto2.EquipIds = new List(SuitCfgArray.Instance.GetCfg(201007).partsArr); proto.PlayerDressupList.Add(dressupProto2); return proto; } private ArenaTargetProto GetArenaTargetProto1() { ArenaTargetProto proto = new ArenaTargetProto(); proto.Grade = 1; proto.RankInGrade = 10000; proto.Type = FightTargetType.ROBOT; proto.RoleInfo = new OtherRoleInfoProto(); proto.RoleInfo.RoleName = "机器人"; ArenaRobotProto robotProto = new ArenaRobotProto(); robotProto.RobotId = 5; robotProto.Random = 9000; robotProto.CardIdList = new List() { 2000009, 2000010, 20000011 }; robotProto.SuitList = new List() { 201011, 201012, 201013 }; proto.RobotDressupInfo = robotProto; return proto; } } }