diff --git a/serverlogic/src/main/java/com/ljsd/GameLogicService.java b/serverlogic/src/main/java/com/ljsd/GameLogicService.java index 69445f022..68488ad80 100644 --- a/serverlogic/src/main/java/com/ljsd/GameLogicService.java +++ b/serverlogic/src/main/java/com/ljsd/GameLogicService.java @@ -66,9 +66,10 @@ public class GameLogicService implements IService { Gson gson = new Gson(); CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); String ip = coreSettings.getIp(); - int port = coreSettings.getGmport(); + int gmport = coreSettings.getGmport(); int worldport = coreSettings.getWorldport(); - String rpcUrl = ip + ":" + port+ ":" + worldport; + int port = coreSettings.getPort(); + String rpcUrl = ip + ":" + gmport+ ":" + worldport+":"+port; RedisUtil.getInstence().set(RedisKey.LOGIC_SERVER_INFO+RedisKey.Delimiter_colon+GameApplication.serverId,gson.toJson(rpcUrl)); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index af119ad2e..33817dae3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -356,6 +356,7 @@ public class RedisKey { //玉虚论道 public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 + public static final String CROSS_YUXULUNDAO_RANK_PERSON = "CROSS_YUXULUNDAO_RANK_PERSON";//排行榜信息 public static final String CROSS_YUXULUNDAO_ROBOT_INFO = "CROSS_YUXULUNDAO_ROBOT_INFO";//机器人信息 public static final String CROSS_YUXULUNDAO_RECORD = "CROSS_YUXULUNDAO_RECORD";//战斗回放 public static final String CROSS_SERVER_USER = "CROSS_SERVER_USER";//redis存储个人基本信息 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 9e52b850a..1764c35b0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -1422,7 +1422,7 @@ public class RedisUtil { RedisKey.CROSS_SERVICE_ARENA.equals(type)||RedisKey.WORLD_ARENA_RANK_MY_MATH.equals(type)|| RedisKey.WORLD_ARENA_MY_PRON.equals(type)||RedisKey.WORLD_ARENA_RRECORD.equals(type)|| RedisKey.CROSS_YUXULUNDAO_RANK.equals(type)||RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO.equals(type)|| - RedisKey.CROSS_YUXULUNDAO_RECORD.equals(type) + RedisKey.CROSS_YUXULUNDAO_RECORD.equals(type)|| RedisKey.CROSS_YUXULUNDAO_RANK_PERSON.equals(type) ) { return type + RedisKey.Delimiter_colon + key; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoChallengeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoChallengeHandler.java index 9022686c2..8c6e6f12e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoChallengeHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoChallengeHandler.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.handler.crossServer; import com.google.gson.Gson; +import com.ljsd.GameApplication; import com.ljsd.fight.ArenaRecord; import com.ljsd.fight.FightType; import com.ljsd.jieling.config.json.CoreSettings; @@ -74,13 +75,12 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler yuxuTeamId = Lists.newArrayList(); yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE); yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO); @@ -151,10 +153,10 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler= 1000) { if (defQuery.getCrossYuxulundaoNewScore() >= winerGetScore) { defQuery.setCrossYuxulundaoNewScore(defQuery.getCrossYuxulundaoNewScore() + loserGetScore); - rank.addRank(user.getId(), String.valueOf(crossGroup), defQuery.getCrossYuxulundaoNewScore()); + rank.addRank(defUid, String.valueOf(crossGroup), defQuery.getCrossYuxulundaoNewScore()); } else { //分数不够扣 - rank.addRank(user.getId(), String.valueOf(crossGroup), 0); + rank.addRank(defUid, String.valueOf(crossGroup), 0); defQuery.setCrossYuxulundaoNewScore(0); } } @@ -174,7 +176,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler= 1000) { defQuery.setCrossYuxulundaoNewScore(defQuery.getCrossYuxulundaoNewScore() + winerGetScore); - rank.addRank(user.getId(), String.valueOf(crossGroup), defQuery.getCrossYuxulundaoNewScore()); + rank.addRank(defUid, String.valueOf(crossGroup), defQuery.getCrossYuxulundaoNewScore()); } } @@ -254,6 +256,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler dailyReward = user.getArenaManager().getCrossYuxulundaoDailyRewad(); @@ -272,32 +275,10 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler rPCClient = null; - try { - rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString()); - crossArenaManager = rPCClient.getClient().getHeroManagerInfo(uid); - } catch (Exception e) { - LOGGER.info("callback=>", e); - } finally { - if (rPCClient != null) { - rPCClient.returnObject(sb.toString()); - } else { - LOGGER.info("callback=> rPCClient is null "); - return null; - } - } + if(GameApplication.serverId != csPlayer.getServerId()){ + crossArenaManager = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer); } arenaRecord.setCreateTime(TimeUtils.nowInt()); // 时间 arenaRecord.setAttackId(defUserUid); //id diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java index 75c3357df..ec5e72248 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java @@ -307,8 +307,6 @@ public class CrossServiceLogic { int force3 = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false); player.setMaxFore(force1+force2+force3); CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); - player.setRpcIp(coreSettings.getIp()); - player.setRpcPort(coreSettings.getPort()); return player; } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java index 9ef1cad98..63d163a52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java @@ -81,8 +81,9 @@ public class CrossYuxulundaoLogic { //TODO 删除初始化一些数据 String key1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, String.valueOf(crossGroup)); String key2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup)); + String key3 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, String.valueOf(crossGroup)); //String key3 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(crossGroup)); - RedisUtil.getInstence().del(key1, key2); + RedisUtil.getInstence().del(key1, key2,key3); AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType()); int robotIndex = 100; Random random = new Random(); @@ -115,7 +116,7 @@ public class CrossYuxulundaoLogic { return; } String title = SErrorCodeEerverConfig.getI18NMessage("MsRankTitle"); - String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup)); + String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, Integer.toString(crossGroup)); Set arenaRank = RedisUtil.getInstence().getReverseZset(rkey, 0, -1); List arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).filter(n -> n > 1000).boxed().collect(Collectors.toList()); for (int i = 0; i < arenaRankfilt.size(); i++) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java index 09da79fb2..71f8137c7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java @@ -81,14 +81,7 @@ public class CSPlayer { * 玉虚论道历史达到的最高等级 */ private int crossYxldMaxLevel = 0 ; //历史达到的最高等级 - /** - * rpcIp - */ - private String rpcIp ; - /** - * rpcPort - */ - private int rpcPort ; + public CSPlayer(User user) { PlayerManager manager = user.getPlayerInfoManager(); @@ -238,19 +231,4 @@ public class CSPlayer { this.crossYxldMaxLevel = crossYxldMaxLevel; } - public String getRpcIp() { - return rpcIp; - } - - public void setRpcIp(String rpcIp) { - this.rpcIp = rpcIp; - } - - public int getRpcPort() { - return rpcPort; - } - - public void setRpcPort(int rpcPort) { - this.rpcPort = rpcPort; - } } 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 1e5d805f7..f5f0953f4 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 @@ -670,7 +670,7 @@ public class FightUtil { } CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); List heroFightInfos = new ArrayList<>(); - if (csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort() == coreSettings.getPort()) { + if (GameApplication.serverId == csPlayer.getServerId()) { //本服玩家 User user = UserManager.getUser(csPlayer.getUserId()); List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId, new ArrayList<>()); 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 8a5bcf140..a896ab396 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 @@ -862,40 +862,7 @@ public class PlayerLogic { PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(builder.build()); return playerTeamInfo.build(); } - - public static CrossArenaManager getCrossArenaManager(CSPlayer csPlayer )throws Exception{ - if(csPlayer==null){ - return null; - //throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - //基本信息从redis中拿 剩下的队伍 属性 数据量大的数据rpc调用 - // String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(csPlayer.getServerId()); - //rpc 数据调用测试 - String ip =csPlayer.getRpcIp(); - int port = csPlayer.getRpcPort(); - int uid = csPlayer.getUserId(); - StringBuilder sb = new StringBuilder(); - sb.append("RPCCORE").append("|") - .append(ip).append("|") - .append(port).toString(); - ClientAdapterPo rPCClient = null; - CrossArenaManager crossArenaManager = null ; - try{ - rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString()); - crossArenaManager = rPCClient.getClient().getHeroManagerInfo(uid); - }catch (Exception e) { - LOGGER.info("callback=>", e); - } finally { - if(rPCClient != null){ - rPCClient.returnObject(sb.toString()); - }else{ - LOGGER.info("callback=> rPCClient is null "); - } - } - return crossArenaManager; - } - - + //获取跨服玩家信息 public CommonProto.TeamOneInfo getCrossYxldMyTeamInfo(User user,List team) throws Exception{ CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(user.getId()); @@ -966,6 +933,36 @@ public class PlayerLogic { } return builder.build(); } + public CrossArenaManager getCrossArenaManagerData(CSPlayer csPlayer )throws Exception{ + String rpcString = RedisUtil.getInstence().getObject(RedisKey.LOGIC_SERVER_INFO, String.valueOf(csPlayer.getServerId()), String.class, -1); + String ip = rpcString.split(":")[0]; + String port = rpcString.split(":")[3]; + //rpc 数据调用 + //String ip =csPlayer.getRpcIp(); + //int port = csPlayer.getRpcPort(); + int uid = csPlayer.getUserId(); + StringBuilder sb = new StringBuilder(); + sb.append("RPCCORE").append("|") + .append(ip).append("|") + .append(port).toString(); + ClientAdapterPo rPCClient = null; + CrossArenaManager crossArenaManager = null ; + try{ + rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString()); + crossArenaManager = rPCClient.getClient().getHeroManagerInfo(uid); + }catch (Exception e) { + LOGGER.info("callback=>", e); + } finally { + if(rPCClient != null){ + rPCClient.returnObject(sb.toString()); + }else{ + LOGGER.info("callback=> rPCClient is null "); + return null; + } + } + return crossArenaManager; + } + //获取跨服玩家信息 public CommonProto.TeamOneInfo getCrossYxldOneTeamInfo(int id,List team) throws Exception { CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(id); @@ -986,36 +983,15 @@ public class PlayerLogic { .setServerName(serverName); //如果是本服玩家 直接本服调用数据 CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class); - if(csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort()== coreSettings.getPort()){ + if(GameApplication.serverId == csPlayer.getServerId()){ User user = UserManager.getUser(id); return PlayerLogic.getInstance().getCrossYxldMyTeamInfo(user, team); } - //rpc 数据调用测试 - String ip =csPlayer.getRpcIp(); - int port = csPlayer.getRpcPort(); - int uid = csPlayer.getUserId(); - StringBuilder sb = new StringBuilder(); - sb.append("RPCCORE").append("|") - .append(ip).append("|") - .append(port).toString(); - - ClientAdapterPo rPCClient = null; - - CrossArenaManager crossArenaManager = null ; - try{ - rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString()); - crossArenaManager = rPCClient.getClient().getHeroManagerInfo(uid); - }catch (Exception e) { - LOGGER.info("callback=>", e); - } finally { - if(rPCClient != null){ - rPCClient.returnObject(sb.toString()); - }else{ - LOGGER.info("callback=> rPCClient is null "); - return null; - } + 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); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java index 44322d8a3..54d75a857 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java @@ -57,7 +57,8 @@ public enum RankEnum { CROSS_GUILD_FORCE_RANK(36,RedisKey.GUILD_FORCE_RANK,CrossGuildForceRank::new,true),//跨服公会总战力排行 CROSS_YUXULUNDAO_RANK(37,RedisKey.CROSS_YUXULUNDAO_RANK,CrossYuXuLunDaoRank::new,true),//跨服玉虚论道 - CROSS_SEVEN_WORLD_RANK(39,RedisKey.SEVEN_WORLD_INTEGRAL_RANK,CrossRank::new,true)//跨服七届试炼 + CROSS_SEVEN_WORLD_RANK(39,RedisKey.SEVEN_WORLD_INTEGRAL_RANK,CrossRank::new,true),//跨服七届试炼 + CROSS_YUXULUNDAO_RANK_PERSON(40,RedisKey.CROSS_YUXULUNDAO_RANK_PERSON,CrossYuXuLunDaoPersonRank::new,true),//跨服玉虚论道真人排行榜 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoPersonRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoPersonRank.java new file mode 100644 index 000000000..0843b207d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossYuXuLunDaoPersonRank.java @@ -0,0 +1,143 @@ +package com.ljsd.jieling.logic.rank.rankImpl; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.logic.GlobleSystemLogic; +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.root.User; +import com.ljsd.jieling.logic.family.CrossDeathPathLogic; +import com.ljsd.jieling.logic.hero.HeroLogic; +import org.springframework.data.redis.core.ZSetOperations; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.Set; + +public class CrossYuXuLunDaoPersonRank extends AbstractRank{ + + public CrossYuXuLunDaoPersonRank(int type, String redisKey) { + super(type, redisKey); + } + + @Override + public PlayerInfoProto.RankResponse getRank(int uid, String rkey, int page, int rankEndLine) throws Exception { + return super.getRank(uid, String.valueOf(ArenaLogic.getInstance().getViewSeason()), page, rankEndLine); + } + + @Override + public long[] getDataByScore(Double score) { + return new long[]{score.intValue()}; + } + + @Override + public double getScore(double... data) { + return data[0]; + } + + /** + *向排行榜添加或在原来的数据上修改某条数据 + */ + public void addOrUpdateRank(int uid,String rkey,double... data){ + String key = RedisKey.getKey(redisKey,rkey,false); + //decr + RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data)); + } + @Override + protected void getCrossOptional(int index, ZSetOperations.TypedTuple data, PlayerInfoProto.RankResponse.Builder builder) throws Exception { + if(Integer.parseInt(data.getValue())<1000){ + CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() + .setRank(index) + .setParam1(0) + .setParam2(getParam2(data.getScore())) + .setParam3(getParam3(data.getScore())); + CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), data.getValue(), CrossArenaEnemy.class); + if(mapEntry==null){ + return; + } + String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(mapEntry.getServerID()); + everyRankInfo.setParam1(mapEntry.getTotalForce()); + CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder() + .setUid(mapEntry.getEnemyId_UUid()) + .setUserName(mapEntry.getRandomName()) + .setLevel(mapEntry.getLevel()==0?100:mapEntry.getLevel()) + .setUserSkin(80012) + .setRankInfo(everyRankInfo) + .setServerName(serverName) + .setSex(0).setCrossScore(mapEntry.getEnemyStatus()); + builder.addRanks(everyRank); + }else{ + //ArenaOfUser query = CrossServiceLogic.getInstance().query(Integer.valueOf(data.getValue())); + CSPlayer cPlayer = CrossServiceLogic.getPlayerByRedis(Integer.valueOf(data.getValue())); + CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() + .setRank(index) + .setParam1(getParam1(data.getScore())) + .setParam2(getParam2(data.getScore())) + .setParam3(getParam3(data.getScore())); + //CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo); + CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(cPlayer,everyRankInfo); + builder.addRanks(everyRank); + } + } + public static CommonProto.UserRank.Builder getCrossOneUserRank(CSPlayer player , CommonProto.RankInfo.Builder everyRankInfo){ + String serverName = CrossServiceLogic.getInstance().getServerNameByUId(player.getUserId()); + //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((int)everyRankInfo.getParam1()); + } + + @Override + public void getCrossMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){ + String crossGroup = String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()); + int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey, crossGroup,Integer.toString(user.getId()),false).intValue(); + Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, crossGroup, Integer.toString(user.getId()),false); + int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false); + CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder() + .setRank(myRank) + .setParam1(totalForce) + .setParam2(zSetScore.intValue()) + .build(); + allUserResponse.setMyRankInfo(towerRankInfo); + } + + @Override + public PlayerInfoProto.RankResponse getCrossRank(int uid, String rkey, int page, int rankEndLine) throws Exception { + if(rankEndLine==-1){ + rankEndLine = 100; + } + User user = UserManager.getUser(uid); + if (page == 0) { + page = 1; + } + int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1; + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + Set> scores = + RedisUtil.getInstence().getZsetreverseRangeWithScores(redisKey, String.valueOf(crossGroup), start, end, false); + if(start % rankEndLine == 0){ + start++; + } + PlayerInfoProto.RankResponse.Builder allUserResponse = getCrossAllUserResponse(scores,start); + //当前用户信息 + getCrossMyInfo(user,rkey,allUserResponse); + return allUserResponse.build(); + } + +} 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 f4c7c9d63..278bbac83 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 @@ -13,6 +13,8 @@ import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.CrossDeathPathLogic; import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.rank.RankContext; +import com.ljsd.jieling.logic.rank.RankEnum; import org.springframework.data.redis.core.ZSetOperations; import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; @@ -145,5 +147,15 @@ public class CrossYuXuLunDaoRank extends AbstractRank{ return allUserResponse.build(); } + @Override + public void addRank(int uid,String rkey,double... data){ + String key = RedisKey.getKey(redisKey,rkey,false); + RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data)); + //跨服玉虚论道真人排行榜 + if(uid>1000){ + AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK_PERSON.getType()); + rank.addRank(uid, rkey, data); + } + } }