From 0b1295cb61edfc08108c749d45ef04ace2f913ee Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 17 Feb 2022 14:14:19 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E5=8D=87?= =?UTF-8?q?=E6=98=9F=E6=93=8D=E4=BD=9C=E5=A2=9E=E5=8A=A0=E9=B8=BF=E8=92=99?= =?UTF-8?q?=E9=98=B5=E7=AD=89=E7=BA=A7=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/exception/ErrorCode.java | 1 + .../ljsd/jieling/logic/hero/HeroLogic.java | 57 +++++++++++++++++++ .../main/java/config/SCHeroRankUpConfig.java | 6 ++ 3 files changed, 64 insertions(+) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index d7669248f..76c275c82 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -183,6 +183,7 @@ public enum ErrorCode implements IErrorCode { SHOP_NO_ITEM(152,"商品不存在"), HERO_RETURN_ONLY_LEVEL_ONE(153,"只有1级的神将才可回退,请先进行归元!"), HERO_RETURN_CAN_NOT(154,"此神将不可回退"), + HONGMENG_LEVEL_NOT(155,"鸿蒙阵等级不足"), GUILD_NOT_AUTHORITY(300,"账号因错误发言导致相关功能封禁中,操作失败"), 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 df21c7ef8..c32bfae0b 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 @@ -1464,6 +1464,13 @@ public class HeroLogic { if (targetHero.getLevel(user.getHeroManager()) < scHeroRankUpConfig.getLimitLevel()) { throw new ErrorCodeException(ErrorCode.HERO_LEVE_DOWN); } + + // 验证鸿蒙阵等级 + boolean verifyHomgmeng = upStarVerifyHomgmeng(user, targetHero); + if (!verifyHomgmeng){ + throw new ErrorCodeException(ErrorCode.HONGMENG_LEVEL_NOT); + } + Map consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1); if (consumeMaterialInfoByPosition == null) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); @@ -1648,6 +1655,40 @@ public class HeroLogic { ReportUtil.onReportEvent(user, ReportEventEnum.HERO_STRENGTHEN.getType(), String.valueOf(targetHero.getTemplateId()), String.valueOf(oldStar), String.valueOf(targetHero.getStar()), consume, reportConsumeHero.toString()); } + /** + * 升星验证鸿蒙阵等级 + * @param user + * @param hero + * @return + */ + private boolean upStarVerifyHomgmeng(User user, Hero hero){ + // 英雄配置表信息 + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + // 升星表 + Map configMap = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE, scHero.getStar()); + // 升星数据 + SCHeroRankUpConfig rankUp = configMap.get(hero.getStar() + 1); + // 0表示没有限制 + if (rankUp == null || rankUp.getLimitHomgmengLevel() <= 0){ + return true; + } + HeroManager heroManager = user.getHeroManager(); + int hongmengLevel = 0; + // 鸿蒙碑开启,读取鸿蒙碑等级 + if (heroManager.getHongmengTablet() > 0){ + hongmengLevel = heroManager.getHongmengTablet(); + }else { + // 否则获取前6个最高等级英雄种最后一个的等级 + List heroList = getCountHeroByLevel(user, 6); + hongmengLevel = heroList.get(heroList.size()-1).getOriginalLevel(); + } + // 验证等级 + if (hongmengLevel >= rankUp.getLimitHomgmengLevel()){ + return true; + } + return false; + } + /** * 升星验证同系道具 * @@ -5147,6 +5188,22 @@ public class HeroLogic { addOrUpdateHongmeng(session, false); } + /** + * 倒叙排列英雄,获取指定前几位英雄 + * @param user + * @param count + * @return + */ + public List getCountHeroByLevel(User user, int count){ + Map heroMap = user.getHeroManager().getHeroMap(); + ArrayList heroes = new ArrayList<>(heroMap.values()); + Collections.sort(heroes); + if (heroes.size() >= count){ + return heroes.subList(0,count); + } + return heroes; + } + /** * 添加或更新鸿蒙守卫 * diff --git a/tablemanager/src/main/java/config/SCHeroRankUpConfig.java b/tablemanager/src/main/java/config/SCHeroRankUpConfig.java index dbcc2025a..3b5de8011 100644 --- a/tablemanager/src/main/java/config/SCHeroRankUpConfig.java +++ b/tablemanager/src/main/java/config/SCHeroRankUpConfig.java @@ -31,6 +31,8 @@ public class SCHeroRankUpConfig implements BaseConfig{ private int[] phase; + private int limitHomgmengLevel; + @Override public void init() throws Exception { } @@ -85,4 +87,8 @@ public class SCHeroRankUpConfig implements BaseConfig{ public int[] getPhase() { return phase; } + + public int getLimitHomgmengLevel() { + return limitHomgmengLevel; + } }