|
@@ -82,27 +82,28 @@ namespace GFGGame
|
|
{
|
|
{
|
|
//(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4
|
|
//(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4
|
|
|
|
|
|
- int partScore = 0;
|
|
|
|
- double tagScore = 0;
|
|
|
|
|
|
+ // int partScore = 0;
|
|
|
|
+ // double tagScore = 0;
|
|
|
|
+ // int tagCount = 0;
|
|
|
|
+ double baseScore = 0;
|
|
|
|
|
|
- for (int i = 0; i < roleData.itemList.Count; i++)
|
|
|
|
|
|
+ for (int i = 0; i < FightScoreCfgArray.Instance.dataArray.Length; i++)
|
|
{
|
|
{
|
|
- partScore += ItemDataManager.GetItemAdditionScore(roleData.itemList[i], roleData.scoreType);
|
|
|
|
- tagScore = ItemDataManager.GetItemTagScore(roleData.itemList[i], roleData.tags);
|
|
|
|
|
|
+ baseScore += GetPartBaseScore(roleData, i + 1);
|
|
}
|
|
}
|
|
|
|
|
|
- return (partScore + tagScore + roleData.baseScore + roleData.cardScore) * ConstScoreSystem.MAIN_SCORE;
|
|
|
|
|
|
+ return (baseScore + roleData.baseScore + roleData.cardScore) * ConstScoreSystem.MAIN_SCORE;
|
|
}
|
|
}
|
|
|
|
|
|
public double GetRobotMainScore(FightRobotData robotData)
|
|
public double GetRobotMainScore(FightRobotData robotData)
|
|
{
|
|
{
|
|
//(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4
|
|
//(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4
|
|
|
|
|
|
- int partScore = 0;
|
|
|
|
|
|
+ double partScore = 0;
|
|
|
|
|
|
for (int i = 0; i < FightScoreCfgArray.Instance.dataArray.Length; i++)
|
|
for (int i = 0; i < FightScoreCfgArray.Instance.dataArray.Length; i++)
|
|
{
|
|
{
|
|
- partScore += robotData.targetPareScorList[i];
|
|
|
|
|
|
+ partScore += GetRobotPartBaseScore(robotData, i);
|
|
}
|
|
}
|
|
|
|
|
|
return (partScore + robotData.baseScore + robotData.cardScore) * ConstScoreSystem.MAIN_SCORE;
|
|
return (partScore + robotData.baseScore + robotData.cardScore) * ConstScoreSystem.MAIN_SCORE;
|
|
@@ -124,7 +125,7 @@ namespace GFGGame
|
|
//部件评分=部件基础分*部件系数
|
|
//部件评分=部件基础分*部件系数
|
|
//点击评分=(部件基础分+(人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分)
|
|
//点击评分=(部件基础分+(人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分)
|
|
//卡牌评分=总属性*技能配表百分比
|
|
//卡牌评分=总属性*技能配表百分比
|
|
- double partBaseScore = GetPartBaseScore(roleData.pardListDic[partId], roleData.pardScoreListDic[partId]);
|
|
|
|
|
|
+ double partBaseScore = GetPartBaseScore(roleData, partId);
|
|
|
|
|
|
double partScore = partBaseScore * ConstScoreSystem.PART_SCORE;
|
|
double partScore = partBaseScore * ConstScoreSystem.PART_SCORE;
|
|
|
|
|
|
@@ -143,7 +144,7 @@ namespace GFGGame
|
|
//部件评分=部件基础分*部件系数
|
|
//部件评分=部件基础分*部件系数
|
|
//点击评分=(部件基础分+(人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分)
|
|
//点击评分=(部件基础分+(人物基础分+卡牌属性分数)*点击系数)*2.22 (新点击公式,防止点击优秀却因为未穿衣服结果是0分)
|
|
//卡牌评分=总属性*技能配表百分比
|
|
//卡牌评分=总属性*技能配表百分比
|
|
- double partBaseScore = robotData.targetPareScorList[partId - 1];
|
|
|
|
|
|
+ double partBaseScore = GetRobotPartBaseScore(robotData, partId);
|
|
|
|
|
|
double partScore = partBaseScore * ConstScoreSystem.PART_SCORE;
|
|
double partScore = partBaseScore * ConstScoreSystem.PART_SCORE;
|
|
|
|
|
|
@@ -162,18 +163,39 @@ namespace GFGGame
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="partId">评分部位</param>
|
|
/// <param name="partId">评分部位</param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- private double GetPartBaseScore(List<int> partList, List<int> partScoreList)
|
|
|
|
|
|
+ private double GetPartBaseScore(FightRoleData roleData, int partId)
|
|
{
|
|
{
|
|
double partScore = 0;
|
|
double partScore = 0;
|
|
double tagScore = 0;
|
|
double tagScore = 0;
|
|
- if (partScoreList == null || partScoreList.Count == 0) return partScore;
|
|
|
|
|
|
+ int tagCount = 0;
|
|
|
|
+ if (!roleData.pardListDic.ContainsKey(partId) || roleData.pardListDic[partId].Count == 0) return partScore;
|
|
|
|
|
|
- for (int i = 0; i < partScoreList.Count; i++)
|
|
|
|
|
|
+ List<int> partList = roleData.pardListDic[partId];
|
|
|
|
+ for (int i = 0; i < partList.Count; i++)
|
|
|
|
+ {
|
|
|
|
+ partScore += roleData.pardScoreListDic[partId][i];
|
|
|
|
+ tagScore += ItemDataManager.GetItemTagScore(partList[i], roleData.tags);
|
|
|
|
+ if (ItemDataManager.CheckItemTagsRight(partList[i], roleData.tags)) tagCount++;
|
|
|
|
+ }
|
|
|
|
+ if (InstanceZonesDataManager.FightScene == ConstInstanceZonesType.Arena)
|
|
|
|
+ {
|
|
|
|
+ tagCount = Math.Min(ArenaTagCfgArray.Instance.dataArray.Length, tagCount);
|
|
|
|
+ double addition = ArenaTagCfgArray.Instance.GetCfg(tagCount).addition / 10000;
|
|
|
|
+ return (partScore + tagScore) * (1 + addition);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return partScore + tagScore;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ private double GetRobotPartBaseScore(FightRobotData robotData, int partId)
|
|
|
|
+ {
|
|
|
|
+ double partBaseScore = robotData.itemScoreList[partId - 1];
|
|
|
|
+ if (InstanceZonesDataManager.FightScene == ConstInstanceZonesType.Arena)
|
|
{
|
|
{
|
|
- partScore += partScoreList[i];
|
|
|
|
- tagScore += ItemDataManager.GetItemTagScore(partList[i], InstanceZonesDataManager.currentFightTags);
|
|
|
|
|
|
+ partBaseScore = partBaseScore * (1 + robotData.tagAddition);
|
|
}
|
|
}
|
|
- return partScore + tagScore;
|
|
|
|
|
|
+ return partBaseScore;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -392,5 +414,91 @@ namespace GFGGame
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 获取竞技场玩家战力
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ public int GetArenaRoleFightScore(List<FightRoleData> roleDatas)
|
|
|
|
+ {
|
|
|
|
+ //竞技场战力=搭配战力+卓越点击战力+卡牌战力
|
|
|
|
+ //搭配战力=第1套搭配所有部件主属性和+第2套搭配所有部件主属性和+第3套搭配所有部件主属性和
|
|
|
|
+ //卓越点击战力=卓越点击评分和/2.33
|
|
|
|
+ //技能战力=(第1套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能1当前等级对应的战力系数+(第1套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能2当前等级对应的战力系数+(第1套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能3当前等级对应的战力系数+(第2套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能1当前等级对应的战力系数+(第2套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能2当前等级对应的战力系数+(第2套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能3当前等级对应的战力系数+(第3套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能1当前等级对应的战力系数+(第3套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能2当前等级对应的战力系数+(第3套搭配所有部件主属性和+卡牌主属性+人物基础分)*技能3当前等级对应的战力系数
|
|
|
|
+ double fightScore = 0;
|
|
|
|
+ for (int i = 0; i < roleDatas.Count; i++)
|
|
|
|
+ {
|
|
|
|
+ double itemSum = GetItemScoreSum(roleDatas[i].itemScoreList);
|
|
|
|
+ double clickScore = GetPerfectClickScore(roleDatas[i]) / ConstScoreSystem.PART_SCORE;
|
|
|
|
+ double skillScore = 0;
|
|
|
|
+ double skillBaseScore = itemSum + roleDatas[i].cardScore + roleDatas[i].baseScore;
|
|
|
|
+ List<PassivitySkillCfg> skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(roleDatas[i].cardId);
|
|
|
|
+ for (int j = 0; j < skillCfgs.Count; j++)
|
|
|
|
+ {
|
|
|
|
+ PassivitySkillLvlCfg skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(roleDatas[i].skillLvs[j], skillCfgs[i].skillId);
|
|
|
|
+ if (skillLvlCfg == null) continue;
|
|
|
|
+ skillScore += skillBaseScore * skillLvlCfg.fightPowerParam / 10000;
|
|
|
|
+ }
|
|
|
|
+ fightScore = itemSum + clickScore + skillScore;
|
|
|
|
+ }
|
|
|
|
+ return (int)Math.Ceiling(fightScore);
|
|
|
|
+ }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 获取竞技场机器人战力
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ public int GetArenaRobotFightScore(List<FightRobotData> robotDatas)
|
|
|
|
+ {
|
|
|
|
+ double fightScore = 0;
|
|
|
|
+ for (int i = 0; i < robotDatas.Count; i++)
|
|
|
|
+ {
|
|
|
|
+ double itemSum = GetItemScoreSum(robotDatas[i].itemScoreList);
|
|
|
|
+ double clickScore = GetRobotPerfectClickScore(robotDatas[i]) / ConstScoreSystem.PART_SCORE;
|
|
|
|
+ double skillScore = 0;
|
|
|
|
+ double skillBaseScore = itemSum + robotDatas[i].cardScore + robotDatas[i].baseScore;
|
|
|
|
+ List<PassivitySkillCfg> skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(robotDatas[i].cardId);
|
|
|
|
+ for (int j = 0; j < skillCfgs.Count; j++)
|
|
|
|
+ {
|
|
|
|
+ PassivitySkillLvlCfg skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(robotDatas[i].skillLvs[j], skillCfgs[i].skillId);
|
|
|
|
+ if (skillLvlCfg == null) continue;
|
|
|
|
+ skillScore += skillBaseScore * skillLvlCfg.fightPowerParam / 10000;
|
|
|
|
+ }
|
|
|
|
+ fightScore = itemSum + clickScore + skillScore;
|
|
|
|
+ }
|
|
|
|
+ return (int)Math.Ceiling(fightScore);
|
|
|
|
+ }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 所有部件主属性和
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ private double GetItemScoreSum(List<int> itemScoreList)
|
|
|
|
+ {
|
|
|
|
+ double scoreSum = 0;
|
|
|
|
+ for (int i = 0; i < itemScoreList.Count; i++)
|
|
|
|
+ {
|
|
|
|
+ scoreSum += itemScoreList[i];
|
|
|
|
+ }
|
|
|
|
+ return scoreSum;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ private double GetPerfectClickScore(FightRoleData roleData)
|
|
|
|
+ {
|
|
|
|
+ double clickScore = 0;
|
|
|
|
+ foreach (int key in roleData.pardScoreListDic.Keys)
|
|
|
|
+ {
|
|
|
|
+ clickScore += GetPartScore(roleData, key, ClickType.PREFACT_CLICK, 0);
|
|
|
|
+ }
|
|
|
|
+ return clickScore;
|
|
|
|
+ }
|
|
|
|
+ private double GetRobotPerfectClickScore(FightRobotData robotData)
|
|
|
|
+ {
|
|
|
|
+ double clickScore = 0;
|
|
|
|
+ FightScoreCfg[] scoreCfg = FightScoreCfgArray.Instance.dataArray;
|
|
|
|
+ for (int i = 0; i < scoreCfg.Length; i++)
|
|
|
|
+ {
|
|
|
|
+ clickScore += GetRobotPartScore(robotData, i + 1, ClickType.PREFACT_CLICK, 0);
|
|
|
|
+ }
|
|
|
|
+ return clickScore;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|