diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 5ef6f75a0..8012cc161 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -1727,41 +1727,34 @@ public class HeroLogic { /** * 根据英雄等级计算出starBreaklId - * * @param heroTid * @param heroLevel * @return */ public int calRobotStarBreakByLevel(int heroTid, int heroLevel) { - // 获取进阶属性 + // 获取原始星级 int star = SCHero.getsCHero().get(heroTid).getStar(); - Map byStar = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE, star); - if (byStar != null) { - // 换个对象,尽量不要修改原值 - List rankUpConfigs = new ArrayList<>(byStar.values()); - // 聚合::根据openlevel倒序,输出list - List collect = rankUpConfigs.stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel).reversed()).collect(Collectors.toList()); - for (SCHeroRankUpConfig scHeroRankUpConfig : collect) { - if (heroLevel == scHeroRankUpConfig.getOpenLevel()) { - if (scHeroRankUpConfig.getOpenStar() > 10) { - continue; - } - return scHeroRankUpConfig.getId(); - } else if (heroLevel > scHeroRankUpConfig.getOpenLevel()) { - if (scHeroRankUpConfig.getOpenStar() > 10) { - continue; - } - return scHeroRankUpConfig.getId() + 1; + // 根据等级计算星级 + int heroStar = calRobotStarByLevel(heroTid,heroLevel); + // 突破,根据初始星级获取不同分区 + Map configByShow = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE, star); + int starBreakId = 0; + if (configByShow != null) { + // openLevel 正序 + List collect = configByShow.values().stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel)).collect(Collectors.toList()); + for (SCHeroRankUpConfig rank : collect) { + if (heroStar == rank.getOpenStar()){ + starBreakId = rank.getId(); + break; } } } - return 0; + return starBreakId; } /** * 根据英雄等级计算出BreaklId - * * @param heroTid * @param heroLevel * @return @@ -1769,18 +1762,20 @@ public class HeroLogic { public int calRobotBreakByLevel(int heroTid, int heroLevel) { // 初始等级 int star = SCHero.getsCHero().get(heroTid).getStar(); - Map byBreak = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.BREAK_TYPE, star); - if (byBreak != null) { - List rankUpConfigs = new ArrayList<>(byBreak.values()); - // 聚合:根据openlevel倒叙排序,输出成list - List collect = rankUpConfigs.stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel).reversed()).collect(Collectors.toList()); - for (SCHeroRankUpConfig scHeroRankUpConfig : collect) { - if (heroLevel > scHeroRankUpConfig.getLimitLevel()) { - return scHeroRankUpConfig.getId(); + // 突破,根据初始星级获取不同分区 + Map configByShow = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.BREAK_TYPE, star); + int breakId = 0; + if (configByShow != null) { + // openLevel 正序排列 + List collect = configByShow.values().stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel)).collect(Collectors.toList()); + for (SCHeroRankUpConfig rank : collect) { + if (heroLevel < rank.getLimitLevel()){ + break; } + breakId = rank.getId(); } } - return 0; + return breakId; } /** @@ -1794,38 +1789,65 @@ public class HeroLogic { SCHero scHero = SCHero.getsCHero().get(heroTid); // 英雄初始星级 int star = scHero.getStar(); - - // 进阶,根据初始星级获取不同分区,先进行进阶验证,再进行突破验证 - Map byStar = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE, star); - if (byStar != null) { - // 换个对象,尽量不要修改原值 - List rankUpStar = new ArrayList<>(byStar.values()); - // 聚合::根据openlevel倒序,输出list - List collect = rankUpStar.stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel).reversed()).collect(Collectors.toList()); - for (SCHeroRankUpConfig val : collect) { - if (heroLevel > val.getOpenLevel()) { - // 计算星级需要+1操作 - return val.getOpenStar(); - } - } - } - // 突破,根据初始星级获取不同分区 - Map byBreak = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.BREAK_TYPE, star); - if (byBreak != null) { - List rankUpBreak = new ArrayList<>(byBreak.values()); - // 聚合:根据openlevel倒叙排序,输出成list - List collect = rankUpBreak.stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel).reversed()).collect(Collectors.toList()); - for (SCHeroRankUpConfig val : collect) { - if (heroLevel > val.getLimitLevel()) { - return val.getOpenStar(); + Map configByShow = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE, star); + if (configByShow != null) { + // openLevel 正序排列 + List collect = configByShow.values().stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel)).collect(Collectors.toList()); + // 遍历 + for (int i = collect.size() - 1; i >= 0; i--) { + SCHeroRankUpConfig rank = collect.get(i); + if (heroLevel >= rank.getOpenLevel() && i == collect.size()-1){ + star = rank.getOpenStar(); + } + if (heroLevel > rank.getOpenLevel()){ + star = rank.getOpenStar()+1; + break; + } + if (heroLevel <= rank.getOpenLevel() && i == 0 && heroLevel >= 100){ + star = rank.getLimitStar(); + break; } } } - return star; } + /** + * 根据等级计算机器人的星级,突破等级,星级突破等级 + * @param heroLevel + * @param type + * @param star + * @return + */ + private int calRobotIdByLevel(int heroLevel, int type, int star){ + // 突破,根据初始星级获取不同分区 + Map configByShow = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(type, star); + if (configByShow != null) { + List configs = new ArrayList<>(configByShow.values()); + // 聚合:根据openlevel倒叙排序,输出成list + List collect = configs.stream().sorted(Comparator.comparing(SCHeroRankUpConfig::getOpenLevel).reversed()).collect(Collectors.toList()); + for (int i = 0; i < collect.size(); i++) { + SCHeroRankUpConfig rank = collect.get(i); + + // 等级卡在突破阶段,返回下层星级 + if (heroLevel == rank.getOpenLevel()) { + return rank.getId(); + } + // 最高星级 + else if (heroLevel > rank.getOpenLevel() && i==0){ + return rank.getId(); + } + // 等级超过突破阶段,返回上层等级 + else if (heroLevel > rank.getOpenLevel()){ + return collect.get(i-1).getId(); + } + } + } + return 0; + } + + private Map getParaRate(SCHero scHero, int heroStar, int heroLevel, int heroBreakId) { Map result = new HashMap<>(2); Object rankupPara = null;