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 0e9249e96..039deba31 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,21 +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(); - return calRobotIdByLevel(heroLevel, GlobalsDef.UP_STAR_TYPE, star); + // 根据等级计算星级 + 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 starBreakId; } /** * 根据英雄等级计算出BreaklId - * * @param heroTid * @param heroLevel * @return @@ -1749,7 +1762,20 @@ public class HeroLogic { public int calRobotBreakByLevel(int heroTid, int heroLevel) { // 初始等级 int star = SCHero.getsCHero().get(heroTid).getStar(); - return calRobotIdByLevel(heroLevel, GlobalsDef.BREAK_TYPE, star); + // 突破,根据初始星级获取不同分区 + 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 breakId; } /** @@ -1763,17 +1789,31 @@ public class HeroLogic { SCHero scHero = SCHero.getsCHero().get(heroTid); // 英雄初始星级 int star = scHero.getStar(); - Map config = STableManager.getConfig(SCHeroRankUpConfig.class); - // 等级从高到低开始验证,先升星,后突破 - int id = calRobotIdByLevel(heroLevel, GlobalsDef.UP_STAR_TYPE, star); - if (id > 0){ - // 大于0表示存在升星等级 - return Optional.ofNullable(config.get(id)).map(SCHeroRankUpConfig::getOpenStar).orElse(star); - } - id = calRobotIdByLevel(heroLevel, GlobalsDef.BREAK_TYPE, star); - if (id > 0){ - // 大于0表示存在突破等级 - return Optional.ofNullable(config.get(id)).map(SCHeroRankUpConfig::getOpenStar).orElse(star); + // 突破,根据初始星级获取不同分区 + 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(); + break; + } + if (heroLevel > rank.getOpenLevel()){ + star = rank.getOpenStar()+1; + break; + } + if (i == 0 && heroLevel <= rank.getOpenLevel() && heroLevel > 100){ + star = rank.getOpenStar(); + break; + } + if (heroLevel >= 81 && heroLevel <= 100){ + star = 5; + break; + } + } } return star; } @@ -1794,6 +1834,7 @@ public class HeroLogic { 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(); @@ -1811,6 +1852,7 @@ public class HeroLogic { return 0; } + private Map getParaRate(SCHero scHero, int heroStar, int heroLevel, int heroBreakId) { Map result = new HashMap<>(2); Object rankupPara = null;