using ET; using System; using System.Collections.Generic; using UnityEngine; namespace GFGGame { public class ClickType { public const int MISS_CLICK = 0; public const int GREAT_CLICK = 1; public const int PREFACT_CLICK = 2; } public class BeginTime { public const int PART_SCORE_1 = 1;//作用第一回合 public const int PART_SCORE_2 = 2;//作用第二回合 public const int PART_SCORE_3 = 3;//作用第三回合 public const int PART_SCORE_4 = 4;//作用第四回合 public const int PART_SCORE_5 = 5;//作用第五回合 public const int PART_SCORE_6 = 6;//作用第六回合 public const int PART_ALL_FIGHT_BEGIN = 7;//对战开始 public const int PART_PREFACT_CLICK = 8;//每次优秀点击 public const int PART_FIGHT_BEGIN = 9;//每回合开始 public const int PART_FIGHT_END = 10;//每回合结束 } // public class CurrentTime // { // public const int PART_ALL_FIGHT_BEGIN = 0;//对战开始 // public const int PART_PREFACT_CLICK = 1;//每次优秀点击 // public const int PART_FIGHT_BEGIN = 2;//每回合开始 // public const int PART_FIGHT_END = 3;//每回合结束 // } public class ScoreSystemData : SingletonBase { private Dictionary> equipDicWithPartId = new Dictionary>(); /// /// 将穿戴部件分组 /// public void SetEquipDicWithType() { equipDicWithPartId.Clear(); var equipDatas = MyDressUpHelper.dressUpObj.itemList; 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 mainScore { get; set; } /// /// 返回总主属性分 /// /// public double GetMainScore() { //(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4 var equipDatas = MyDressUpHelper.dressUpObj.itemList; 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 += ItemDataManager.GetItemAdditionScore(equipDatas[i], InstanceZonesDataManager.currentScoreType, InstanceZonesDataManager.currentFightTags); // 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][0]) // { // tagProportion += ConstScoreSystem.TAG_SCORE; // } // } // } } int roleScore = RoleLevelCfgArray.Instance.GetCfg(GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl)).baseScore; int cardScore = ItemDataManager.GetItemAdditionScore(InstanceZonesDataManager.currentCardId, InstanceZonesDataManager.currentScoreType); double tagScore = tagProportion * partScore; return (partScore + tagScore + roleScore + cardScore) * ConstScoreSystem.MAIN_SCORE; } /// /// 部件评分 /// /// 部件id /// 点击状态0:miss,1:优秀,2:完美 /// 总主属性 /// 评分部位 /// 是否展示卡牌效果 /// public int GetPartScore(int partId, int clickType, double skillScore) { //部件评分=部件基础分*部件系数 //点击评分=(部件基础分+(+人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分) //卡牌评分=总属性*技能配表百分比 double partScore = GetPartItemScore(partId); double clickScore = ScoreSystemData.Instance.GetPartItemClickScore(partId, clickType); return (int)Math.Ceiling(partScore + clickScore + skillScore); // return (int)Math.Round((partScore + skillScore)); } public double GetPartItemScore(int partId) { return GetPartBaseScore(partId) * ConstScoreSystem.PART_SCORE; } /// /// 部件基础评分 /// /// 评分部位 /// private double GetPartBaseScore(int partId) { double partScore = 0; if (!equipDicWithPartId.ContainsKey(partId)) return partScore; for (int i = 0; i < equipDicWithPartId[partId].Count; i++) { partScore += ItemDataManager.GetItemAdditionScore(equipDicWithPartId[partId][i], InstanceZonesDataManager.currentScoreType, InstanceZonesDataManager.currentFightTags); } return partScore; } private double GetPartItemClickScore(int partId, int clickState) { //点击评分=(部件基础分+(+人物基础分+卡牌属性分数)*点击系数)*2.22 double clickCoefficient = 0; switch (clickState) { case ClickType.MISS_CLICK: clickCoefficient = ConstScoreSystem.MISS_SCORE; break; case ClickType.GREAT_CLICK: clickCoefficient = ConstScoreSystem.GREAT_SCORE; break; case ClickType.PREFACT_CLICK: clickCoefficient = ConstScoreSystem.PERFECT_SCORE; break; } int roleScore = RoleLevelCfgArray.Instance.GetCfg(GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl)).baseScore; int cardScore = ItemDataManager.GetItemAdditionScore(InstanceZonesDataManager.currentCardId, InstanceZonesDataManager.currentScoreType); double clickScore = (GetPartBaseScore(partId) + (cardScore + roleScore) * clickCoefficient) * ConstScoreSystem.CLICK_SCORE; return clickScore; } /// /// 获取有效技能配置,过滤掉:被对方失效的、不符合作用时机、未满足触发概率的技能 /// /// public List GetValidSkills(int currentTime, int cardId, int targetCardId, int partId) { List skillCfgs = new List(); List mySkillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(cardId); List targetSkillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(targetCardId); List nullifySkillIndex = new List(); for (int i = 0; i < targetSkillCfgs.Count; i++) { PassivitySkillCfg skillCfg = targetSkillCfgs[i]; int skillLv = SkillDataManager.Instance.GetSkillLv(targetCardId, skillCfg.skillId); PassivitySkillLvlCfg skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLv, skillCfg.skillId); if (skillLvlCfg.beginTime == BeginTime.PART_ALL_FIGHT_BEGIN && partId <= skillLvlCfg.roundTime || skillLvlCfg.beginTime == BeginTime.PART_PREFACT_CLICK && currentTime == BeginTime.PART_PREFACT_CLICK || skillLvlCfg.beginTime == BeginTime.PART_FIGHT_BEGIN && currentTime == BeginTime.PART_FIGHT_BEGIN || skillLvlCfg.beginTime == BeginTime.PART_FIGHT_END && currentTime == BeginTime.PART_FIGHT_END || skillLvlCfg.beginTime <= BeginTime.PART_SCORE_6 && currentTime == BeginTime.PART_FIGHT_END && partId == skillLvlCfg.beginTime) { bool isProbability = skillLvlCfg.nullifySkillIndex > 0 && UnityEngine.Random.Range(0, 10000) < skillLvlCfg.probability; if (isProbability) nullifySkillIndex.Add(skillLvlCfg.nullifySkillIndex); } } for (int i = 0; i < mySkillCfgs.Count; i++) { PassivitySkillCfg skillCfg = mySkillCfgs[i]; int skillLv = SkillDataManager.Instance.GetSkillLv(cardId, skillCfg.skillId); PassivitySkillLvlCfg skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLv, skillCfg.skillId); if (nullifySkillIndex.IndexOf(i + 1) >= 0) continue;//技能被对手失效 if (skillLvlCfg.beginTime == BeginTime.PART_ALL_FIGHT_BEGIN && partId <= skillLvlCfg.roundTime || skillLvlCfg.beginTime == BeginTime.PART_PREFACT_CLICK && currentTime == BeginTime.PART_PREFACT_CLICK || skillLvlCfg.beginTime == BeginTime.PART_FIGHT_BEGIN && currentTime == BeginTime.PART_FIGHT_BEGIN || skillLvlCfg.beginTime == BeginTime.PART_FIGHT_END && currentTime == BeginTime.PART_FIGHT_END || skillLvlCfg.beginTime <= BeginTime.PART_SCORE_6 && currentTime == BeginTime.PART_FIGHT_END && partId == skillLvlCfg.beginTime) { bool isProbability = UnityEngine.Random.Range(0, 10000) < skillLvlCfg.probability; if (isProbability) skillCfgs.Add(skillLvlCfg); } } return skillCfgs; } /// /// 本轮技能分数 /// /// 有效技能列表 /// 总主属性 /// public int GetPartItemSkillScore(List validSkills, double mainScore) { double skillScore = 0; for (int i = 0; i < validSkills.Count; i++) { skillScore += mainScore * validSkills[i].ratio / 10000; } return (int)Math.Ceiling(skillScore); } /// /// 是否展示卡牌效果 /// /// 卡牌id /// 被触发的有效技能列表 /// public bool IsShowCard(int cardId, List validSkills) { if (cardId <= 0) return false;//未选卡 if (validSkills.Count == 0) return false;//本轮没有技能被触发不显示卡牌 List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(cardId); for (int i = 0; i < skillCfgs.Count; i++) { if (skillCfgs[i].mainSkill == 1) { return true; } } return false; } /// /// 登峰造极额外加分 /// /// /// public double GetAllCircleAddScore(double mainScore) { //主属性20%的加分 return mainScore * ConstScoreSystem.ALL_PERFECT_SCORE; } /// /// 根据卡牌Id获取 战斗选卡 界面显示配置 /// /// /// public PassivitySkillCfg GetShowSkillCfg(int cardId) { List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(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.GetCfgsBycardId(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; } } }