123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- using System;
- using System.Collections.Generic;
- using ET;
- using FairyGUI;
- namespace GFGGame
- {
- public class ArenaDataManager : SingletonBase<ArenaDataManager>
- {
- public List<int> ThemeList = new List<int>() { 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<FightRoleData> DressupList = new List<FightRoleData>();//我的搭配列表
- public List<ArenaTargetData> Targets = new List<ArenaTargetData>();//对手
- public ArenaTargetData SelfData = new ArenaTargetData();//自己的排行榜信息
- public Dictionary<int, List<ArenaTargetData>> RankDatasDic = new Dictionary<int, List<ArenaTargetData>>();//排行榜数据
- public List<ArenaHistoryData> HistoryDatas = new List<ArenaHistoryData>();//获取竞技场历史记录
- /*************************************************************************************************************************************/
- public int SelectThemeIndex = 0;//当前选中换装主题(ThemeList)的下标
- public int SelectTargetIndex = -1;//当前选中挑战对象的下标
- public int CurFightIndex = 0;//当前挑战场次下标
- public List<long> myScore = new List<long>();//对战数据,三轮分数
- public List<long> targetScore = new List<long>();//对战数据,三轮分数
- public List<long> myFightScore = new List<long>();//对战数据,竞技场战力,搭配战力,卓越点击战力,卡牌战力
- public List<long> targetFightScore = new List<long>();//对战数据,对手竞技场战力,搭配战力,卓越点击战力,卡牌战力
- /*************************************************************************************************************************************/
- /// <summary>
- /// 是否快速挑战
- /// </summary>
- /// <value></value>
- 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();
- HistoryDatas = null;
- }
- /// <summary>
- /// 试图更新最高段位、排行数据
- /// </summary>
- public void TryUpdateHighest()
- {
- HighestGrade = HighestGrade >= Grade ? HighestGrade : Grade;
- HighestRank = HighestRank >= Rank ? HighestRank : Rank;
- }
- //获取竞技场对手角色战斗数据
- public FightRoleData GetArenaRoleData(int index, ArenaTargetData arenaTarget)
- {
- return arenaTarget.RoleDressupList[index];
- }
- //获取竞技场机器人战斗数据
- public FightRobotData GetArenaRobotData(int index, ArenaTargetData arenaTarget)
- {
- return arenaTarget.RobotDressupList[index];
- }
- /// <summary>
- /// 获取推荐列表
- /// </summary>
- /// <param name="scoreType"></param>
- /// <param name="tags"></param>
- /// <returns></returns>
- public List<int> GetRecommentItemList(int scoreType, string[] tags)
- {
- Dictionary<int, List<int>> itemListDic = new Dictionary<int, List<int>>();
- Dictionary<int, List<int>> itemDatasDic = DressUpMenuItemDataManager.ItemDatasBySubTypeDic;
- foreach (int subType in itemDatasDic.Keys)
- {
- int key = subType;
- if (itemDatasDic.Count == 0) continue;
- if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(subType)) continue;
- List<int> 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<int>();
- }
- 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<int> itemList = new List<int>();
- 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<int> SortDressList(List<int> 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) && !ItemDataManager.CheckItemTagsRight(b, tags)) return -1;
- if (ItemDataManager.CheckItemTagsRight(b, tags) && !ItemDataManager.CheckItemTagsRight(a, tags)) return 1;
- int scoreA = ItemDataManager.GetItemAdditionScore(a, scoreType, tags);
- int scoreB = ItemDataManager.GetItemAdditionScore(b, scoreType, tags);
- return scoreB - scoreA;
- });
- return dressList;
- }
- /// <summary>
- /// 获取符合标签的服装总个数
- /// </summary>
- /// <param name="itemList">服装列表</param>
- /// <param name="tags">标签</param>
- /// <returns></returns>
- public int GetTagsCount(List<int> 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;
- }
- /*********************************************************************************************************************/
- /// <summary>
- /// 获取三套服装总战力
- /// </summary>
- /// <param name="roleType"></param>
- /// <param name="roleDatas"></param>
- /// <param name="robotDatas"></param>
- /// <returns></returns>
- public long GetAllFightScore(int roleType, List<FightRoleData> roleDatas, List<FightRobotData> robotDatas)
- {
- long fightScore = 0;
- List<long> fightScoreDatas = GetFightScoreList(roleType, roleDatas, robotDatas);
- for (int i = 0; i < fightScoreDatas.Count; i++)
- {
- fightScore += fightScoreDatas[i];
- }
- return fightScore;
- }
- /// <summary>
- /// index=0:搭配战力
- /// index=1:卓越点击战力
- /// index=2:卡牌战力/技能战力
- /// </summary>
- /// <param name="roleType"></param>
- /// <param name="roleDatas"></param>
- /// <param name="robotDatas"></param>
- /// <returns></returns>
- public List<long> GetFightScoreList(int roleType, List<FightRoleData> roleDatas, List<FightRobotData> robotDatas)
- {
- List<long> fightScoreDatas = new List<long>();
- long itemSum = 0;
- long clickScore = 0;
- long skillScore = 0;
- for (int i = 0; i < ThemeList.Count; i++)
- {
- if (roleType == ArenaFightTargetType.PLAYER)
- {
- itemSum += GetItemScoreSum(roleDatas[i].itemScoreList);
- clickScore += GetPerfectClickScore(roleDatas[i]) / (long)ConstScoreSystem.PART_SCORE;
- skillScore += FightDataManager.Instance.GetSkillFightScore(itemSum, roleDatas[i].baseScore, roleDatas[i].cardId, roleDatas[i].cardScore, roleDatas[i].skillLvs);
- }
- else
- {
- itemSum += GetItemScoreSum(robotDatas[i].itemScoreList);
- clickScore += GetRobotPerfectClickScore(robotDatas[i]) / (long)ConstScoreSystem.PART_SCORE;
- skillScore += FightDataManager.Instance.GetSkillFightScore(itemSum, robotDatas[i].baseScore, robotDatas[i].cardId, robotDatas[i].cardScore, robotDatas[i].skillLvs);
- }
- }
- fightScoreDatas.Add(itemSum);
- fightScoreDatas.Add(clickScore);
- fightScoreDatas.Add(skillScore);
- return fightScoreDatas;
- }
- /// <summary>
- /// 所有部件主属性和
- /// </summary>
- /// <returns></returns>
- public long GetItemScoreSum(List<int> itemScoreList)
- {
- long scoreSum = 0;
- for (int i = 0; i < itemScoreList.Count; i++)
- {
- scoreSum += (long)itemScoreList[i];
- }
- return scoreSum;
- }
- //玩家卓越点击战力
- private long GetPerfectClickScore(FightRoleData 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(FightRobotData 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].RoleDressupList[0].cardId = 2000009;
- Targets[0].RoleDressupList[0].cardScore = 100;
- Targets[0].RoleDressupList[0].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[0].RoleDressupList[0].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
- Targets[0].RoleDressupList[1].cardId = 2000009;
- Targets[0].RoleDressupList[1].cardScore = 100;
- Targets[0].RoleDressupList[1].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[0].RoleDressupList[1].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[0].RoleDressupList[2].cardId = 2000009;
- Targets[0].RoleDressupList[2].cardScore = 100;
- Targets[0].RoleDressupList[2].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[0].RoleDressupList[2].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
- Targets.Add(ArenaSproxy.GetArenaTargetData(GetArenaTargetProto()));
- Targets[1].RoleDressupList[0].cardId = 2000009;
- Targets[1].RoleDressupList[0].cardScore = 100;
- Targets[1].RoleDressupList[0].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[1].RoleDressupList[0].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
- Targets[1].RoleDressupList[1].cardId = 2000009;
- Targets[1].RoleDressupList[1].cardScore = 100;
- Targets[1].RoleDressupList[1].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[1].RoleDressupList[1].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; Targets[1].RoleDressupList[2].cardId = 2000009;
- Targets[1].RoleDressupList[2].cardScore = 100;
- Targets[1].RoleDressupList[2].skillLvs = new List<int>() { 1, 1, 1 };
- Targets[1].RoleDressupList[2].itemScoreList = new List<int>() { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
- Targets.Add(ArenaSproxy.GetArenaTargetData(GetArenaTargetProto1()));
- Targets[2].RobotDressupList[0] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0);
- Targets[2].RobotDressupList[1] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0);
- Targets[2].RobotDressupList[2] = ArenaSproxy.GetFightRobotData(GetArenaTargetProto1().RobotDressupInfo, 0);
- DressupList.Add(new FightRoleData());
- DressupList[0].tags = new string[] { Tag };
- DressupList.Add(new FightRoleData());
- DressupList.Add(new FightRoleData());
- // DressupList[0].skillLvs = new List<int>() { 1, 1, 1 };
- // DressupList[1].skillLvs = new List<int>() { 1, 1, 1 };
- // DressupList[2].skillLvs = new List<int>() { 1, 1, 1 };
- }
- private ArenaTargetProto GetArenaTargetProto()
- {
- ArenaTargetProto proto = new ArenaTargetProto();
- proto.Grade = 1;
- proto.RankInGrade = 10000;
- proto.Type = ArenaFightTargetType.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<int>(SuitCfgArray.Instance.GetCfg(201005).partsArr);
- proto.PlayerDressupList.Add(dressupProto0);
- ArenaDressupProto dressupProto1 = new ArenaDressupProto();
- dressupProto1.CardId = 2000010;
- dressupProto1.EquipIds = new List<int>(SuitCfgArray.Instance.GetCfg(201006).partsArr);
- proto.PlayerDressupList.Add(dressupProto1);
- ArenaDressupProto dressupProto2 = new ArenaDressupProto();
- dressupProto2.CardId = 2000011;
- dressupProto2.EquipIds = new List<int>(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 = ArenaFightTargetType.ROBOT;
- proto.RoleInfo = new OtherRoleInfoProto();
- proto.RoleInfo.RoleName = "机器人";
- ArenaRobotProto robotProto = new ArenaRobotProto();
- robotProto.RobotId = 5;
- robotProto.Random = 9000;
- robotProto.CardIdList = new List<int>() { 2000009, 2000010, 20000011 };
- robotProto.SuitList = new List<int>() { 201011, 201012, 201013 };
- proto.RobotDressupInfo = robotProto;
- return proto;
- }
- }
- }
|