From 067f639a520c46226f1d9b0848a6ead424f3b5d2 Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 7 Dec 2021 10:40:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E8=AE=A1=E7=AE=97=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/hero/HeroLogic.java | 104 ++++++++---------- 1 file changed, 44 insertions(+), 60 deletions(-) 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..e5d331db4 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 @@ -1735,27 +1735,7 @@ public class HeroLogic { 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; - } - } - } - return 0; + return calRobotInfoToLevel(heroLevel, GlobalsDef.UP_STAR_TYPE, star); } @@ -1769,18 +1749,7 @@ 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(); - } - } - } - return 0; + return calRobotInfoToLevel(heroLevel, GlobalsDef.BREAK_TYPE, star); } /** @@ -1794,38 +1763,53 @@ 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(); - } - } + // 等级从高到低开始验证,先升星,后突破 + int info = calRobotInfoToLevel(heroLevel, GlobalsDef.UP_STAR_TYPE, star); + if (info > 0){ + // 大于0表示存在升星等级 + return info; } - - // 突破,根据初始星级获取不同分区 - 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(); - } - } + info = calRobotInfoToLevel(heroLevel, GlobalsDef.BREAK_TYPE, star); + if (info > 0){ + // 大于0表示存在突破等级 + return info; } - return star; } + /** + * 根据等级计算机器人的星级,突破等级,星级突破等级 + * @param heroLevel + * @param type + * @param star + * @return + */ + private int calRobotInfoToLevel(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.getOpenStar(); + } + // 最高星级 + else if (heroLevel > rank.getOpenLevel() && i==0){ + return rank.getOpenStar(); + } + // 等级超过突破阶段,返回上层等级 + else if (heroLevel > rank.getOpenLevel()){ + return rank.getOpenStar()+1; + } + } + } + return 0; + } + private Map getParaRate(SCHero scHero, int heroStar, int heroLevel, int heroBreakId) { Map result = new HashMap<>(2); Object rankupPara = null;