From dec1f13d850cc4e1505cafed5b2a12239ac40f51 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Sat, 25 Sep 2021 18:09:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=89=E8=99=9A=E8=AE=BA=E9=81=93=E6=88=98?= =?UTF-8?q?=E6=96=97rpc=E8=B0=83=E7=94=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...YuxululndaoChallengeBeforeTeamHandler.java | 2 +- .../CrossYuxulundaoChallengeHandler.java | 32 +-- .../crossService/CrossServiceLogic.java | 4 +- .../logic/arena/CrossYuxulundaoLogic.java | 38 ++-- .../ljsd/jieling/logic/fight/FightUtil.java | 108 +++++++++- .../ljsd/jieling/logic/hero/HeroLogic.java | 200 ++++++++++++++++++ .../jieling/logic/player/PlayerLogic.java | 76 ++++++- .../logic/rank/rankImpl/AbstractRank.java | 2 +- .../rank/rankImpl/CrossYuXuLunDaoRank.java | 24 ++- 9 files changed, 447 insertions(+), 39 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxululndaoChallengeBeforeTeamHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxululndaoChallengeBeforeTeamHandler.java index 7abd82a32..58fb1be69 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxululndaoChallengeBeforeTeamHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxululndaoChallengeBeforeTeamHandler.java @@ -46,7 +46,7 @@ public class CrossYuxululndaoChallengeBeforeTeamHandler extends BaseHandler= loserGetScore) { + if (myQuery.getCrossYuxulundaoNewScore()+ loserGetScore >= 0 ) { myQuery.setCrossYuxulundaoNewScore(myQuery.getCrossYuxulundaoNewScore() + loserGetScore); myQuery.setCrossYuxulundaoOldScore(myQuery.getCrossYuxulundaoOldScore() + loserGetScore); rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), loserGetScore); @@ -230,10 +230,10 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler result = null;// - String myServerName = CrossServiceLogic.getInstance().getServerNameByUId(uid); if (arenaRecord.getYxldResult() == null) { result = new ArrayList(); result.add(0); @@ -366,8 +371,13 @@ public class CrossYuxulundaoLogic { result = Arrays.stream(arenaRecord.getYxldResult()).boxed().collect(Collectors.toList()); } if(isSend){ + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(uid); + CSPlayer defPlayer = CrossServiceLogic.getPlayerByRedis(arenaRecord.getDefUid()); + String myServerName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(csPlayer.getServerId()); + String defServerName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(defPlayer.getServerId()); return CommonProto.crossYxldPlayerRecordInfo.newBuilder().setTime(arenaRecord.getCreateTime()) - .setMyServerName(myServerName==null?"":myServerName) + .setMyServerName(myServerName==null?"":myServerName)//我的服务器名称 + .setServerName(defServerName) //对手的服务器名称 .setUid(arenaRecord.getAttackId()) .addAllResult(result) .setMyScoreChange(arenaRecord.getYxldScoreChange()) @@ -387,8 +397,6 @@ public class CrossYuxulundaoLogic { .setUserName(arenaRecord.getUserName()) .setHeadFrame(arenaRecord.getHeadFrame()) .setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build(); - } - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index e0a9433d5..bb61f527e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -2,8 +2,10 @@ package com.ljsd.jieling.logic.fight; import com.googlecode.protobuf.format.JsonFormat; import com.ljsd.GameApplication; +import com.ljsd.fight.ArenaRecord; import com.ljsd.fight.CheckFight; import com.ljsd.fight.DefFightSnapData; +import com.ljsd.jieling.config.json.CoreSettings; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -11,10 +13,12 @@ import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.handler.map.TrailHero; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.blood.BloodLogic; import com.ljsd.jieling.logic.dao.Hero; import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.cross.CSPlayer; import com.ljsd.jieling.logic.dao.gm.ArenaOfHero; import com.ljsd.jieling.logic.dao.gm.ArenaOfHeroManager; import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; @@ -24,6 +28,12 @@ import com.ljsd.jieling.logic.fight.robot.RobotInfo; import com.ljsd.jieling.logic.fight.specialparm.SpecialForTeamBuildEnum; import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.thrift.idl.CrossArenaManager; +import com.ljsd.jieling.thrift.idl.PurpleMansionSeal; +import com.ljsd.jieling.thrift.idl.RPCRequestIFace; +import com.ljsd.jieling.thrift.pool.ClientAdapterPo; +import com.ljsd.jieling.util.ConfigurableApplicationContextManager; import com.ljsd.jieling.util.FightDataUtil; import com.ljsd.jieling.util.MonsterUtil; import config.*; @@ -32,10 +42,7 @@ import org.luaj.vm2.LuaValue; import rpc.protocols.CommonProto; import util.TimeUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class FightUtil { @@ -658,5 +665,98 @@ public class FightUtil { .setTeamPassiveList("") .build(); } + public static CommonProto.FightTeamInfo makeCrossPersonData(int uid, int teamId, ArenaRecord arenaRecord)throws Exception{ + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(uid); + if(csPlayer==null){ + return null;//throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); + List heroFightInfos = new ArrayList<>(); + if(csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort()== coreSettings.getPort()){ + //本服玩家 + User user = UserManager.getUser(uid); + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId,new ArrayList<>()); + arenaRecord.setAttackForce(arenaRecord.getAttackForce()+HeroLogic.getInstance().calTeamTotalForce(user,teamId,false)); + + for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos){ + Hero hero = user.getHeroManager().getHeroMap().get(teamPosHeroInfo.getHeroId()); + if (hero == null) { + continue; + } + StringBuilder propertySb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(user,hero).toString(); + Map attributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId); + String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero.getTemplateId(),hero.getLevel(user.getHeroManager()),attributeMap).toString(); + + CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo + .newBuilder() + .setUnitId(Integer.toString(hero.getTemplateId())) + .setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1)) + .setProperty(property.substring(0, property.length()-1)) + .setPosition(teamPosHeroInfo.getPosition()) + .setStar(hero.getStar()) + .setSkinId(hero.getSkin()) + .build(); + heroFightInfos.add(heroFightInfo); + } + return CommonProto.FightTeamInfo. + newBuilder() + .addAllFightUnitList(heroFightInfos) + .addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(user)) + .setTeamPassiveList("") + .build(); + }else{ + //其他服玩家 + //rpc 数据调用测试 + String ip1 =csPlayer.getRpcIp(); + int port1 = csPlayer.getRpcPort(); + int uid1 = csPlayer.getUserId(); + StringBuilder sb = new StringBuilder(); + sb.append("RPCCORE").append("|") + .append(ip1).append("|") + .append(port1).toString(); + + ClientAdapterPo rPCClient1 = null; + rPCClient1 = ClientAdapterPo.getClientAdapterPo(sb.toString()); + + CrossArenaManager crossArenaManager= rPCClient1.getClient().getHeroManagerInfo(uid1); + if(crossArenaManager == null){ + //LOGGER.info("hehhhhhhhhhhh"); + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + List teamPosHeroInfos = crossArenaManager.getTeams().getOrDefault(teamId,new ArrayList<>()); + arenaRecord.setAttackForce(arenaRecord.getAttackForce() + crossArenaManager.getTotalForceByTeam().get(teamId)); + + Collection seals = crossArenaManager.getSeals().values(); + + for(com.ljsd.jieling.thrift.idl.TeamPosHeroInfo teamPosHeroInfo:teamPosHeroInfos){ + com.ljsd.jieling.thrift.idl.ArenaOfHero hero = crossArenaManager.getHeros().get(teamPosHeroInfo.getHeroId()); + if(hero == null){ + continue; + } + StringBuilder propertySb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(seals,hero).toString(); + Map attributeMap = crossArenaManager.getHeros().get(hero.getId()).getAttributeMapByTeam().get(teamId); + String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero.getTemplateId(),hero.getLevel(),attributeMap).toString(); + + CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo + .newBuilder() + .setUnitId(Integer.toString(hero.getTemplateId())) + .setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1)) + .setProperty(property.substring(0, property.length()-1)) + .setPosition(teamPosHeroInfo.getPosition()) + .setStar(hero.getStar()) + .setSkinId(hero.getSkin()) + .build(); + heroFightInfos.add(heroFightInfo); + } + return CommonProto.FightTeamInfo. + newBuilder() + .addAllFightUnitList(heroFightInfos) + .addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(crossArenaManager)) + .setTeamPassiveList("") + .build(); + } + } } 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 e9b67b78f..c0c101e04 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 @@ -42,6 +42,7 @@ import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType; import com.ljsd.jieling.logic.store.BuyGoodsNewLogic; import com.ljsd.jieling.logic.store.newRechargeInfo.PushRechargeType; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.thrift.idl.CrossArenaManager; import com.ljsd.jieling.tools.Utils; import com.ljsd.jieling.util.CBean2Proto; import com.ljsd.jieling.util.ItemUtil; @@ -1957,6 +1958,150 @@ public class HeroLogic{ return sb; } + + public StringBuilder getCrossHeroSkillStr(User user, Hero hero){ + + List skillList = new ArrayList<>(); + SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId()); + List skillListByStar = tempHero.getSkillListByStar(hero.getStar()); + if(skillListByStar!=null){ + skillList.addAll(skillListByStar); + } + // 大于10星,觉醒技 + if (hero.getStar() > HERO_MAX_STAR) { + skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId())); + skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId())); + } else { + skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId())); + skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId())); + } + + //魂印 + Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); + Map config = STableManager.getConfig(SEquipConfig.class); + soulEquipByPositionMap.values().forEach(e->{ + Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add); + }); + + //法宝技能 + int[] equipTalismana = tempHero.getEquipTalismana(); + if(equipTalismana.length>=1 &&hero.getStar()>=equipTalismana[0]){ + int especialEquipLevel = hero.getEspecialEquipLevel(); + int especialEquipId = equipTalismana[1]; + Map sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId); + sEquipTalismana.forEach((k,v)->{ + if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){ + Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i)); + } + }); + } + + // 紫府神印技能 + Collection seals = user.getHeroManager().getPurpleMansionSeal().values(); + seals.forEach(v->{ + // 使用中神印 + if (v.getState() == 1){ + // 附身神印 + if (v.getType() == 1){ + if (v.getSubId().equals(hero.getId())){ + getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList); + } + } + // 通用神印 + else { + getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList); + } + } + }); + + StringBuilder sb = new StringBuilder(); + coverSkill(skillList); + for(int i=0;i seals, com.ljsd.jieling.thrift.idl.ArenaOfHero hero){ + + List skillList = new ArrayList<>(); + SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId()); + List skillListByStar = tempHero.getSkillListByStar(hero.getStar()); + if(skillListByStar!=null){ + skillList.addAll(skillListByStar); + } + // 大于10星,觉醒技 + if (hero.getStar() > HERO_MAX_STAR) { + skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId())); + skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId())); + } else { + skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId())); + skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId())); + } + + //魂印 + Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); + Map config = STableManager.getConfig(SEquipConfig.class); + soulEquipByPositionMap.values().forEach(e->{ + Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add); + }); + + //法宝技能 + int[] equipTalismana = tempHero.getEquipTalismana(); + if(equipTalismana.length>=1 &&hero.getStar()>=equipTalismana[0]){ + int especialEquipLevel = hero.getEspecialEquipLevel(); + int especialEquipId = equipTalismana[1]; + Map sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId); + sEquipTalismana.forEach((k,v)->{ + if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){ + Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i)); + } + }); + } + + // 紫府神印技能 + //Collection seals = user.getHeroManager().getPurpleMansionSeal().values(); + seals.forEach(v->{ + // 使用中神印 + if (v.getState() == 1){ + // 附身神印 + if (v.getType() == 1){ + if (v.getSubId().equals(hero.getId())){ + getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList); + } + } + // 通用神印 + else { + getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList); + } + } + }); + + StringBuilder sb = new StringBuilder(); + coverSkill(skillList); + for(int i=0;i getCrossPokemonSkills(CrossArenaManager crossArenaManager){ + //todo 灵兽 + Map pokemons = crossArenaManager.getPokemons(); + List pokemonInfos = new ArrayList<>(); + for(Map.Entry entry:pokemons.entrySet()){ + com.ljsd.jieling.thrift.idl.Pokemon pokemon = entry.getValue(); + + if(pokemon==null){ + continue; + } + SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar()); + Map map = calOnePokemonAttribute(pokemon.getTmpId(),pokemon.getStar(),pokemon.getLevel()); + StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel()); + CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder() + .setPosition(entry.getKey()) + .setStar(pokemon.getStar()) + .setProperty(propertyBuilder.toString()) + .setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build(); + pokemonInfos.add(info); + } + return pokemonInfos; + } + + public List getCrossPokemonSkills(User user){ + //todo 灵兽 + // 灵兽 + Map pokemons = new HashMap<>(); + Map pokemonMap = user.getPokemonManager().getPokemonMap(); + Map teamMap = user.getPokemonManager().getPokemonTeamMap(); + for (Map.Entry entry : teamMap.entrySet()) { + // clone 深度复制 + Pokemon pokemon = (Pokemon)pokemonMap.get(entry.getValue()).clone(); + pokemons.put(entry.getKey(),pokemon); + } + //Map pokemons = user.getPokemons(); + List pokemonInfos = new ArrayList<>(); + for(Map.Entry entry:pokemons.entrySet()){ + Pokemon pokemon = entry.getValue(); + + if(pokemon==null){ + continue; + } + SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar()); + Map map = calOnePokemonAttribute(pokemon.getTmpId(),pokemon.getStar(),pokemon.getLevel()); + StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel()); + CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder() + .setPosition(entry.getKey()) + .setStar(pokemon.getStar()) + .setProperty(propertyBuilder.toString()) + .setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build(); + pokemonInfos.add(info); + } + return pokemonInfos; + } + public String getPokenmonPassiveSkills(User user,int teamId){ //todo 灵兽 目前用不到 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 0859a1ec7..7acf3a810 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 @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.player; import com.ljsd.GameApplication; import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; import com.ljsd.jieling.config.clazzStaticCfg.TaskStaticConfig; +import com.ljsd.jieling.config.json.CoreSettings; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType; @@ -881,7 +882,76 @@ public class PlayerLogic { } + //获取跨服玩家信息 + public CommonProto.TeamOneInfo getCrossYxldMyTeamInfo(User user,List team) throws Exception{ + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(user.getId()); + 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(user.getId()).setCrossTeamScore(csPlayer.getCrossYuxulundaoNewScore()) + .setServerName(serverName); + for(int teamId: team){ + CommonProto.TeamOneTeamInfo.Builder teamOneTeamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + List teamPosHeroInfos =user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId,new ArrayList<>()); + if(teamPosHeroInfos!=null){ + for (TeamPosHeroInfo heroInfo:teamPosHeroInfos){ + Map heroMap = user.getHeroManager().getHeroMap(); + Hero hero = heroMap.get(heroInfo.getHeroId()); + if(hero == null){ + continue; + } + teamOneTeamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder() + .setHeroid(hero.getId()) + .setHeroTid(hero.getTemplateId()) + .setLevel(hero.getLevel(user.getHeroManager())) + .setStar(hero.getStar()) + .setPosition(heroInfo.getPosition()) + .setSkinId(hero.getSkin()) + .build()); + } + } + // 灵兽 + Map pokemons = new HashMap<>(); + Map pokemonMap = user.getPokemonManager().getPokemonMap(); + Map teamMap = user.getPokemonManager().getPokemonTeamMap(); + for (Map.Entry entry : teamMap.entrySet()) { + // clone 深度复制 + Pokemon pokemon = (Pokemon)pokemonMap.get(entry.getValue()).clone(); + 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 = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); + teamOneTeamInfo.setTotalForce(integer); + for(Map.Entry entry:user.getHeroManager().getPurpleMansionSeal().entrySet()){ + PurpleMansionSeal value = entry.getValue(); + Map heroMap = user.getHeroManager().getHeroMap(); + Hero hero = heroMap.get(value.getSubId()); + if(value.getState()==0){ + continue; + } + teamOneTeamInfo.addSealShow(CommonProto.PurpleSealShowInfo.newBuilder().setType(value.getType()). + setId(value.getSealId()).setHeroTId(hero==null?0:hero.getTemplateId())); + } + //builder.setTeam(teamOneTeamInfo.build()); + builder.addCrossTeam(teamOneTeamInfo.build()); + } + return builder.build(); + } //获取跨服玩家信息 public CommonProto.TeamOneInfo getCrossYxldOneTeamInfo(int id,List team) throws Exception { CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(id); @@ -901,7 +971,11 @@ public class PlayerLogic { .setUid(id).setCrossTeamScore(csPlayer.getCrossYuxulundaoNewScore()) .setServerName(serverName); //rpc调用队伍信息 - + CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); + if(csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort()== coreSettings.getPort()){ + User user = UserManager.getUser(id); + return PlayerLogic.getInstance().getCrossYxldMyTeamInfo(user, team); + } //rpc 数据调用测试 String ip1 =csPlayer.getRpcIp(); int port1 = csPlayer.getRpcPort(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index f0436b28a..f71fab294 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -31,8 +31,8 @@ import java.util.function.BiConsumer; */ public abstract class AbstractRank implements IRank { protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractRank.class); - protected String redisKey; protected int type; + protected String redisKey; /** * 获取排行榜数据,包括个人的排名和所有人的信息,获取调用此方法 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoRank.java index f79658df9..d78448795 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoRank.java @@ -8,6 +8,7 @@ import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.dao.CrossArenaEnemy; import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.cross.CSPlayer; import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.CrossDeathPathLogic; @@ -81,10 +82,31 @@ public class CrossYuXuLunDaoRank extends AbstractRank{ .setParam1(query.getHeroManager().getTotalForce()) .setParam2(getParam2(data.getScore())) .setParam3(getParam3(data.getScore())); - CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo); + //CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo); + CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(Integer.valueOf(data.getValue()),everyRankInfo); builder.addRanks(everyRank); } } + public static CommonProto.UserRank.Builder getCrossOneUserRank(int uid , CommonProto.RankInfo.Builder everyRankInfo){ + String serverName = CrossServiceLogic.getInstance().getServerNameByUId(uid); + CSPlayer player = CrossServiceLogic.getPlayerByRedis(uid); + return CommonProto.UserRank.newBuilder() + .setUid(player.getUserId()) + .setLevel(player.getLevel()) + .setUserName(player.getName()) + .setRankInfo(everyRankInfo) + .setForce(player.getMaxFore()) + .setSex(player.getSex()) + .setHead(player.getHead()) + .setGuildName("") + .setHeadFrame(player.getHeadFrame()) + .setUserMount(player.getUserMount()) + .setUserSkin(player.getSkin()) + .setUserTitle(player.getUserTitle()) + .setPracticeLevel(player.getPracticeLevel()) + .setServerName(serverName) + .setCrossScore(player.getCrossYuxulundaoNewScore()); + } @Override public void getCrossMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){