From b0e341601e6f4ef1fc0de1fa6b31d7465fdd457c Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Mon, 3 Jan 2022 00:24:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=97=E6=B5=AE=E4=BA=89=E9=94=8B=E6=8E=92?= =?UTF-8?q?=E8=A1=8C=E6=A6=9C=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/player/GetPlayerOneTeamInfo.java | 4 +- .../jieling/logic/player/PlayerLogic.java | 79 +++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/player/GetPlayerOneTeamInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/player/GetPlayerOneTeamInfo.java index 58b20a286..930b66d30 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/player/GetPlayerOneTeamInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/player/GetPlayerOneTeamInfo.java @@ -45,10 +45,10 @@ public class GetPlayerOneTeamInfo extends BaseHandler teamId =new ArrayList<>(); + List teamId =new ArrayList<>(1); teamId.add(proto.getTeamId()); //oneTeamInfo = PlayerLogic.getInstance().getCrossOneTeamInfo(proto.getPlayerId(),proto.getTeamId()); - PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo( PlayerLogic.getInstance().getCrossYxldOneTeamInfo(proto.getPlayerId(), teamId)); + PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo( PlayerLogic.getInstance().getCrossYxldOneTeamInfoNew(proto.getPlayerId(), teamId)); MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GET_PLAYER_ONE_TEAM_INFO_RESPONSE.getNumber(),playerTeamInfo.build(),true); return; } 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 6ed90ed89..4335ae9e5 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 @@ -1040,6 +1040,85 @@ public class PlayerLogic { return builder.build(); } + //获取跨服玩家信息 + public CommonProto.TeamOneInfo getCrossYxldOneTeamInfoNew(int id,List team) throws Exception { + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(id); + if(csPlayer==null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + //基本信息从redis中拿 剩下的队伍 属性 数据量大的数据rpc调用 + String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(csPlayer.getServerId()); + CommonProto.TeamOneInfo.Builder builder = CommonProto.TeamOneInfo.newBuilder() + .setHead(csPlayer.getHead()) + .setHeadFrame(csPlayer.getHeadFrame()) + .setUserTitle(csPlayer.getUserTitle()) + .setLevel(csPlayer.getLevel()) + .setName(csPlayer.getName()) + .setGuildName("nb guild") //csPlayer.getGuildName() + .setPracticeLevel(csPlayer.getPracticeLevel()) + .setUid(id).setCrossTeamScore(csPlayer.getCrossYuxulundaoNewScore()) + .setServerName(serverName); + //如果是本服玩家 直接本服调用数据 + CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); + if(GameApplication.serverId == csPlayer.getServerId()){ + User user = UserManager.getUser(id); + return PlayerLogic.getInstance().getCrossYxldMyTeamInfo(user, team); + } + CrossArenaManager crossArenaManager = getCrossArenaManagerData(csPlayer) ; + if(crossArenaManager == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); + } + //rpc 数据调用测试 + for(int teamId: team){ + CommonProto.TeamOneTeamInfo.Builder teamOneTeamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + List teamPosHeroInfos = crossArenaManager.getTeams().get(teamId); + if(teamPosHeroInfos!=null){ + for (com.ljsd.jieling.thrift.idl.TeamPosHeroInfo heroInfo:teamPosHeroInfos) { + com.ljsd.jieling.thrift.idl.ArenaOfHero hero = crossArenaManager.getHeros().get(heroInfo.getHeroId()); + teamOneTeamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder() + .setHeroid(hero.getId()) + .setHeroTid(hero.getTemplateId()) + .setLevel(hero.getLevel()) + .setStar(hero.getStar()) + .setPosition(heroInfo.getPosition()) + .setSkinId(hero.getSkin()) + .build()); + } + } + if(crossArenaManager.getPokemons()!=null){ + Map pokemonMap = crossArenaManager.getPokemons(); + Map teamMap = crossArenaManager.getPokemonTeamMap(); + for(Map.Entry entry :teamMap.entrySet()){ + // clone 深度复制 + com.ljsd.jieling.thrift.idl.Pokemon pokemon = pokemonMap.get(entry.getValue()); + pokemon.setTmpId(pokemon.getTmpId()); + pokemon.setId(pokemon.getId()); + pokemon.setLevel(pokemon.getLevel()); + pokemon.setStar(pokemon.getStar()); + teamOneTeamInfo.addPokemonInfos(CBean2Proto.getSimpleTeamInfoByPokeMon(pokemon, entry.getKey())); + } + } + LOGGER.info("=====================跨服获取阵容:{}",teamId); + Integer integer = crossArenaManager.getTotalForceByTeam().getOrDefault(teamId,0); + teamOneTeamInfo.setTotalForce(integer); + if(crossArenaManager.getSeals()!= null){ + for(Map.Entry entry:crossArenaManager.getSeals().entrySet()){ + com.ljsd.jieling.thrift.idl.PurpleMansionSeal value = entry.getValue(); + com.ljsd.jieling.thrift.idl.ArenaOfHero arenaOfHero = crossArenaManager.getHeros().get(value.getSubId()); + if(value.getState()==0){ + continue; + } + teamOneTeamInfo.addSealShow(CommonProto.PurpleSealShowInfo.newBuilder().setType(value.getType()).setId(value.getSealId()).setHeroTId(arenaOfHero==null?0:arenaOfHero.getTemplateId())); + } + } + //builder.setTeam(teamOneTeamInfo.build()); + //builder.addCrossTeam(teamOneTeamInfo.build()); + builder.setTeam(teamOneTeamInfo.build()); + } + //PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(builder.build()); + return builder.build(); + } + public PlayerInfoProto.GetPlayerOneTeamInfoResponse getCrossOneTeamInfo(int id,List crossTeamId) throws Exception { ArenaOfUser query = CrossServiceLogic.getInstance().query(id); if(query==null){