From 222c10252b6e3cfa206cfc612f57f431f0815656 Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 19 May 2021 09:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=A1=8C3.0=20=E7=A5=9E=E5=8D=B0?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=A2=9E=E5=8A=A0,=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E7=A5=9E=E5=8D=B0=E9=80=BB=E8=BE=91=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EndExpeditionBattleRequest.java | 2 +- .../GetExpeditionRequestHandler.java | 2 +- .../HeroNodeGetInfoRequestHandler.java | 2 +- .../Expedition/HeroNodeRequestHandler.java | 2 +- .../handler/GameGM/GMRequestHandler.java | 4 +- .../jieling/handler/GetAllHerosHandler.java | 2 +- .../hero/DoHeroChangeRequestHandler.java | 2 +- .../hero/ReplacePurpleMansionSealHandler.java | 72 ++++++++++--------- .../jieling/logic/player/PlayerLogic.java | 11 ++- .../com/ljsd/jieling/util/CBean2Proto.java | 39 +++++++--- .../java/com/ljsd/jieling/util/ItemUtil.java | 2 +- 11 files changed, 86 insertions(+), 54 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java index 274b4bea2..d7d2b6984 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java @@ -287,7 +287,7 @@ public class EndExpeditionBattleRequest extends BaseHandler heroList = new ArrayList<>(); Map heroMap = user.getExpeditionManager().getHeroMap(); for(Hero hero : heroMap.values()){ - heroList.add(CBean2Proto.getHero(user,hero)); + heroList.add(CBean2Proto.getHero(hero)); } builder.addAllHeroList(heroList); Map equipMap = user.getExpeditionManager().getEquipMap(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java index 749403da0..98ba0285b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java @@ -110,7 +110,7 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler sealMap = user.getHeroManager().getPurpleMansionSeal(); - // 替换神印 - if (oldSealId != newSealId){ - PurpleMansionSeal newSeal = sealMap.get(newSealId); - if (newSeal == null){ - throw new ErrorCodeException("神印不存在!"); - } - if (newSeal.getType() == 1 && (subId == null || "".equals(subId))){ - throw new ErrorCodeException("英雄id不能为空!"); - } + PurpleMansionSeal seal = sealMap.get(twoSeal); + if (seal == null){ + throw new ErrorCodeException("神印不存在!"); + } + if (seal.getType() == 1 && "".equals(heroId)){ + throw new ErrorCodeException("英雄id不能为空!"); + } + + // 使用神印 + if (oneSeal != twoSeal){ // 旧神印状态修改 - PurpleMansionSeal oldSeal = sealMap.get(oldSealId); + PurpleMansionSeal oldSeal = sealMap.get(oneSeal); if (oldSeal != null){ oldSeal.setState(0); - user.getHeroManager().putPurpleMansionSeal(oldSeal); } - // 新神印状态修改 - newSeal.setState(1); - // 附属英雄id修改,类型之后需要读表 - if (!newSeal.getSubId().equals(subId) && newSeal.getType() == 1){ - newSeal.setSubId(subId); - } - user.getHeroManager().putPurpleMansionSeal(newSeal); + seal.setState(1); } - // 相同神印 - else { - PurpleMansionSeal seal = sealMap.get(newSealId); - // 卸载神印 - if (seal.getSubId().equals(subId)){ - seal.setState(0); + + // 卸载神印 + if (oneSeal == twoSeal && seal.getSubId().equals(heroId)){ + seal.setState(0); + } + + // 附身神印,替换英雄id + if (oneSeal == twoSeal && !seal.getSubId().equals(heroId)){ + if (seal.getType() != 1){ + throw new ErrorCodeException("神印类型错误!"); } - // 替换英雄id - else { - if (seal.getType() != 1){ - throw new ErrorCodeException("神印类型错误!"); + // seal update + for (PurpleMansionSeal value : sealMap.values()) { + if (value.getSubId().equals(heroId)){ + value.setSubId(""); + value.setState(0); + break; } - seal.setSubId(subId); } - user.getHeroManager().putPurpleMansionSeal(seal); + seal.setSubId(heroId); } // 返回最新神印列表 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index 560cfcfb3..cf3afd426 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -500,12 +500,19 @@ public class PlayerLogic { CommonProto.TeamOneInfo.Builder oneInfo = CBean2Proto.getTeamOneInfo(user); TeamPosManager teamPosManager = user.getTeamPosManager(); CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + // 总战力 teamInfo.setTotalForce(HeroLogic.getInstance().calTeamTotalForce(user,teamId,false)); if(teamPosManager.getTeamPosForHero().containsKey(teamId)){ - for (TeamPosHeroInfo heroInfo:teamPosManager.getTeamPosForHero().get(teamId)) { + // 添加队伍信息 + List heroInfos = teamPosManager.getTeamPosForHero().get(teamId); + for (TeamPosHeroInfo heroInfo:heroInfos) { Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); teamInfo.addTeam(CBean2Proto.getSimpleTeamInfoByHero(user, hero,heroInfo.getPosition())); } + + // 紫府神印 + List collect = heroInfos.stream().map(TeamPosHeroInfo::getHeroId).collect(Collectors.toList()); + teamInfo.addAllSealShow(CBean2Proto.getPurpleSealShow(user,collect)); } //加入灵兽信息 PokemonManager pokemonManager = user.getPokemonManager(); @@ -619,7 +626,7 @@ public class PlayerLogic { builder.addEquip(CBean2Proto.getEquipProto(equipId)); } builder.setForce(HeroLogic.getInstance().calForce(heroNotBufferAttribute)); - builder.setHero(CBean2Proto.getHero(userInMem,hero)); + builder.setHero(CBean2Proto.getHero(hero)); Map guildSkill = userInMem.getGuildMyInfo().getGuildSkill(); int profession = SCHero.getsCHero().get(hero.getTemplateId()).getProfession(); Integer skill = guildSkill.getOrDefault(profession, 0); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 937162aa6..8fa7f68d9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -206,7 +206,7 @@ public class CBean2Proto { return userMountLists; } - public static CommonProto.Hero getHero(User user, Hero hero){ + public static CommonProto.Hero getHero(Hero hero){ List soulPoss = new ArrayList<>(); Map soulEquipMap = hero.getSoulEquipByPositionMap(); if(soulEquipMap!=null&&!soulEquipMap.isEmpty()){ @@ -235,7 +235,6 @@ public class CBean2Proto { .setCreatetype(hero.getCreateType()) .setChangeId(hero.getChangeId()) .setSkinId(hero.getSkin()) - .addAllSealIdList(getSealIdListByHero(user,hero)) .build(); } @@ -744,20 +743,40 @@ public class CBean2Proto { /** * 获取英雄身上的神印id列表 * @param user - * @param hero + * @param heroIds * @return */ - private static List getSealIdListByHero(User user, Hero hero){ - ArrayList list = new ArrayList<>(); + public static List getPurpleSealShow(User user, List heroIds){ + List list = new ArrayList<>(); + // 已解锁的神印列表 Collection values = user.getHeroManager().getPurpleMansionSeal().values(); - for (PurpleMansionSeal v : values) { + values.forEach(v->{ + // 使用中的神印 if (v.getState() == 1){ - if (v.getType() == 1 && !v.getSubId().equals(hero.getId())){ - continue; + CommonProto.PurpleSealShowInfo builder; + // 通用神印 + if (v.getType() == 0){ + builder = CommonProto.PurpleSealShowInfo.newBuilder() + .setId(v.getSealId()) + .setType(v.getType()) + .setHeroTId(0) + .build(); + list.add(builder); + } + // 附身神印需要 + else if (v.getType() == 1) { + if (heroIds.contains(v.getSubId()) && !"".equals(v.getSubId()) && v.getSubId() != null){ + Hero hero = user.getHeroManager().getHero(v.getSubId()); + builder = CommonProto.PurpleSealShowInfo.newBuilder() + .setId(v.getSealId()) + .setType(v.getType()) + .setHeroTId(hero.getTemplateId()) + .build(); + list.add(builder); + } } - list.add(v.getSealId()); } - } + }); return list; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 6e8966ee3..592e9d318 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -1276,7 +1276,7 @@ public class ItemUtil { heroManager.addHero(hero); // 鸿蒙阵推送 HeroLogic.getInstance().addOrUpdateHongmeng(OnlineUserManager.getSessionByUid(user.getId())); - heroList.add(CBean2Proto.getHero(user,hero)); + heroList.add(CBean2Proto.getHero(hero)); SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); if (scHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_lottery_content_parm)) { //策划资质改成星级 String message = SErrorCodeEerverConfig.getI18NMessageNeedConvert("lamp_lottery_content", new Object[]{playerInfoManager.getNickName(), scHero.getStar(), scHero.getReadingName()},new int[]{0,0,1});