using ET; using System.Collections.Generic; using UnityEngine; namespace GFGGame { public class ScoreSystemData : SingletonBase { public const int MISS_CLICK = 0; public const int GREAT_CLICK = 1; public const int PREFACT_CLICK = 2; private Dictionary> equipDicWithPartId = new Dictionary>(); /// /// 将穿戴部件分组 /// public void SetEquipDicWithType() { equipDicWithPartId.Clear(); var equipDatas = EquipDataCache.cacher.equipDatas; for (int i = 0; i < equipDatas.Count; i++) { FightScoreCfg[] typeCfgs = FightScoreCfgArray.Instance.dataArray; for (int j = 0; j < typeCfgs.Length; j++) { FightScoreCfg cfg = typeCfgs[j]; if (equipDicWithPartId.ContainsKey(cfg.id) == false) { equipDicWithPartId.Add(cfg.id, new List()); } bool isCheckFinish = false; for (int k = 0; k < cfg.subTypesArr.Length; k++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]); if (itemCfg.subType == cfg.subTypesArr[k]) { equipDicWithPartId[cfg.id].Add(equipDatas[i]); isCheckFinish = true; break; } } if (isCheckFinish) break; } } } /// /// 返回总主属性分 /// /// public double GetMainScore() { //(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4 var equipDatas = EquipDataCache.cacher.equipDatas; int partScore = 0; double tagProportion = 0; StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); for (int i = 0; i < equipDatas.Count; i++) { partScore += DressUpMenuItemDataManager.GetItemScore(equipDatas[i]); ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]); for (int j = 0; j < fightCfg.needTagsArr.Length; j++) { if (tagProportion >= ConstScoreSystem.MAX_TAG_COUNT) break; for (int k = 0; k < itemCfg.tagsArr.Length; k++) { if (fightCfg.needTagsArr[j] == itemCfg.tagsArr[k]) { tagProportion += ConstScoreSystem.TAG_SCORE; } } } } int roleScore = RoleLevelCfgArray.Instance.GetCfg(GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl)).baseScore; int cardScore = DressUpMenuItemDataManager.GetItemScore(InstanceZonesDataManager.currentCardId); double tagScore = tagProportion * partScore; return (partScore + tagScore + roleScore + cardScore) * ConstScoreSystem.MAIN_SCORE; } /// /// 部件评分 /// /// 评分部位 /// public double GetPartBaseScore(int partId) { double partScore = 0; if (!equipDicWithPartId.ContainsKey(partId)) return partScore; for (int i = 0; i < equipDicWithPartId[partId].Count; i++) { partScore += DressUpMenuItemDataManager.GetItemScore(equipDicWithPartId[partId][i]); } return partScore; } /// /// 部件评分 /// /// 部件id /// 点击状态0:miss,1:优秀,2:完美 /// 总主属性 /// 评分部位 /// 是否展示卡牌效果 /// public double GetPartScore(int partId, int clickState, double mainScore, double skillScore) { //部件评分=部件基础分*部件系数 //点击评分=(部件基础分+(+人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分) //卡牌评分=总属性*技能配表百分比 double partScore = GetPartItemScore(partId); double clickScore = ScoreSystemData.Instance.GetPartItemClickScore(partId, clickState); return (partScore + clickScore + skillScore); } public double GetPartItemScore(int partId) { return GetPartBaseScore(partId) * ConstScoreSystem.PART_SCORE; } public double GetPartItemClickScore(int partId, int clickState) { //点击评分=(部件基础分+(+人物基础分+卡牌属性分数)*点击系数)*2.22 double clickCoefficient = 0; switch (clickState) { case MISS_CLICK: clickCoefficient = ConstScoreSystem.MISS_SCORE; break; case GREAT_CLICK: clickCoefficient = ConstScoreSystem.GREAT_SCORE; break; case PREFACT_CLICK: clickCoefficient = ConstScoreSystem.PERFECT_SCORE; break; } int roleScore = RoleLevelCfgArray.Instance.GetCfg(GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl)).baseScore; int cardScore = DressUpMenuItemDataManager.GetItemScore(InstanceZonesDataManager.currentCardId); double clickScore = (GetPartBaseScore(partId) + (cardScore + roleScore) * clickCoefficient) * ConstScoreSystem.CLICK_SCORE; return clickScore; } public void GetPartItemCardScore(double mainScore, int partId, out double skillScore, out bool showCard) { skillScore = 0; showCard = false; List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgs(InstanceZonesDataManager.currentCardId); if (skillCfgs.Count == 0) return; for (int i = 0; i < skillCfgs.Count; i++) { PassivitySkillCfg skillCfg = skillCfgs[i]; int skillLv = SkillDataManager.Instance.GetSkillLv(InstanceZonesDataManager.currentCardId, skillCfg.skillId); PassivitySkillLvlCfg skillLvCfg = PassivitySkillLvlCfgArray.Instance.GetCfg(skillLv, skillCfg.skillId); if (partId == skillCfg.subTypes || skillCfg.subTypes == 0) { int isProbability = Random.Range(0, 100) < skillLvCfg.probability ? 1 : 0; if (showCard != true && skillCfg.mainSkill == 1 && isProbability == 1) { //卡牌中包含主技能且此技能被触发,在评分阶段才展示卡牌效果,一张卡牌只要有一个技能需要显示,那就直接显示 showCard = true; } skillScore += mainScore * skillLvCfg.count / 10000 * isProbability; } } } /// /// 登峰造极额外加分 /// /// /// public double GetAllCircleAddScore(double mainScore) { //主属性20%的加分 return mainScore * ConstScoreSystem.ALL_PERFECT_SCORE; } /// /// 根据卡牌Id获取 战斗选卡 界面显示配置 /// /// /// public PassivitySkillCfg GetShowSkillCfg(int cardId) { List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgs(cardId); if (skillCfgs.Count <= 0) { Debug.LogWarning(cardId + " 这张卡片没有配置技能"); return null; } for (int i = 0; i < skillCfgs.Count; i++) { if (skillCfgs[i].showSkill == 1) { // int skillLv = SkillDataManager.Instance.GetSkillLv(cardId, skillCfgs[i].skillId); return skillCfgs[i]; } } return null; } /// /// 根据卡牌Id获取评分主技能显示配置 /// /// /// public PassivitySkillCfg GetMainSkillCfg(int cardId) { // Dictionary> cfgs = SkillDataManager.Instance.dicPassivitySkill[cardId]; List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgs(cardId); if (skillCfgs.Count <= 0) { Debug.LogWarning(cardId + " 这张卡片没有配置技能"); return null; } // foreach (int key in cfgs.Keys) // { for (int i = 0; i < skillCfgs.Count; i++) { if (skillCfgs[i].mainSkill == 1) { // int skillLV = SkillDataManager.Instance.GetSkillLv(cardId, skillCfgs[i].skillId); // PassivitySkillLvlCfgArray skillLvCfg = PassivitySkillLvlCfgArray.Instance.GetCfg(skillLV, skillCfgs[i].skillId); // return cfgs[key][skillLV - 1]; return skillCfgs[i]; } } return null; } } }