From fef22e4ae38fe67aa14c15ff249d34fedf141736 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Sat, 9 Oct 2021 20:24:50 +0800 Subject: [PATCH] =?UTF-8?q?yx1.=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9=20=20=20=20=202.=E6=88=98=E6=96=97?= =?UTF-8?q?=E5=9B=9E=E6=94=BE=E6=88=98=E5=8A=9B=E6=98=BE=E7=A4=BA=20=20=20?= =?UTF-8?q?=20=203.=E7=8E=A9=E5=AE=B6=E5=88=9D=E5=A7=8B=E5=8C=96=E7=A7=AF?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/fight/ArenaRecord.java | 22 ++++++++ .../com/ljsd/jieling/db/redis/RedisKey.java | 2 +- .../CrossYuxulundaoBattleRecordHandler.java | 3 +- .../CrossYuxulundaoChallengeHandler.java | 11 +++- .../CrossYuxulundaoGetInfoHandler.java | 11 ++-- .../logic/arena/CrossYuxulundaoLogic.java | 53 +++++++++++++------ .../ljsd/jieling/logic/fight/FightUtil.java | 8 ++- .../rankImpl/CrossYuXuLunDaoPersonRank.java | 8 +-- .../main/java/config/SArenaRobotConfig.java | 28 +++++++--- 9 files changed, 109 insertions(+), 37 deletions(-) diff --git a/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java b/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java index d186906cf..691dc315f 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java +++ b/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java @@ -1,6 +1,9 @@ package com.ljsd.fight; +import java.util.ArrayList; +import java.util.List; + public class ArenaRecord { private String id; @@ -42,6 +45,9 @@ public class ArenaRecord { private byte[] yxldFightData3; + private List yxldMyForce= new ArrayList<>(3);//玉虚论道自己三队战力 + private List yxldDefForce= new ArrayList<>(3);//玉虚论道敌方三队战力 + private String serverName; private int yxldBattleType;// 战斗类行 1:进攻成功 2:进攻失败 3:防守成功 4:防守失败 @@ -246,4 +252,20 @@ public class ArenaRecord { public void setYxldResult(int[] yxldResult) { this.yxldResult = yxldResult; } + + public List getYxldMyForce() { + return yxldMyForce; + } + + public void setYxldMyForce(List yxldMyForce) { + this.yxldMyForce = yxldMyForce; + } + + public List getYxldDefForce() { + return yxldDefForce; + } + + public void setYxldDefForce(List yxldDefForce) { + this.yxldDefForce = yxldDefForce; + } } 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 33817dae3..810f7b807 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 @@ -355,7 +355,7 @@ public class RedisKey { public static final String CROSS_RANK_UPDATE_VERSION = "CROSS_RANK_UPDATE_VERSION"; //玉虚论道 - public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 + 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";//战斗回放 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoBattleRecordHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoBattleRecordHandler.java index 874d99db9..5ab47e36b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoBattleRecordHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoBattleRecordHandler.java @@ -14,6 +14,7 @@ import rpc.protocols.ArenaInfoProto; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; +import java.util.Collections; import java.util.List; /** @@ -41,7 +42,7 @@ public class CrossYuxulundaoBattleRecordHandler extends BaseHandler list = redisUtil.lGet(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), 0, -1); - + Collections.reverse(list); for (String record : list) { ArenaRecord arenaRecord = new Gson().fromJson(record, ArenaRecord.class); CommonProto.crossYxldPlayerRecordInfo info = CrossYuxulundaoLogic.getCrossYxldPlayerRecordInfo(uid, arenaRecord, false); 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 8c6e6f12e..94bdc54f0 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 @@ -112,6 +112,13 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler{ + arenaRecord.getYxldMyForce().add(HeroLogic.getInstance().calTeamTotalForce(user, n, false)); + });*/ + for(int team : teamId){ + arenaRecord.getYxldMyForce().add(HeroLogic.getInstance().calTeamTotalForce(user, team, false)); + } result = getFightResultByPersonToPerson(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), arenaRecord, res); } long winCount = Arrays.stream(result).boxed().filter(n -> n == 1).count(); @@ -141,7 +148,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler= 2) { //赢了 自己加积分 对方减积分 @@ -253,7 +260,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()) { builder.setIsFirst(false); } else { - //赛季内第一次登陆请求 - //删除上赛季的挑战记录 + //第一次玩此系统 初始化本人积分为1000积分 + if(yuxulundaoTime == 0){ + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2); + csPlayer.setCrossYuxulundaoNewScore(setting.getBasicScore()); + csPlayer.setCrossYuxulundaoOldScore(setting.getBasicScore()); + } + //赛季内第一次登陆请求,删除上赛季的挑战记录 String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false); RedisUtil.getInstence().del(key); //主线编队复制到第一队伍 @@ -136,7 +141,7 @@ public class CrossYuxulundaoGetInfoHandler extends BaseHandler robotInfo = new HashMap<>(100); @@ -105,9 +105,8 @@ public class CrossYuxulundaoLogic { rank.addRank(robotIndex, String.valueOf(crossGroup), config.getMsScroe()); robotInfo.put(String.valueOf(robotIndex), new CrossArenaEnemy(robotIds.get(robotIndex), robotIndex, groupList.get(server), 0, config.getMsScroe(), random.nextBoolean(), PlayerLogic.getInstance().getRandomName2WithOutVerify(), config.getTotalForce(), config.getRoleLv())); } + RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo);*/ LOGGER.info("跨服玉虚论道初始化结束"); - RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo); - } public void sendReward() { @@ -222,9 +221,29 @@ public class CrossYuxulundaoLogic { } arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1); } else { + //换一批规则:先找段位内的真人 不够用分段内的机器人凑 + List arenaRank = new ArrayList(); + SMServerRankConfig con = robotConfigMap.get(SMServerRankConfig.getIdByScore(myQuery.getCrossYuxulundaoNewScore())); + Set> matchRival= RedisUtil.getInstence().getZsetRangeWithScores(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, + Integer.toString(crossGroup),con.getScoreLow(),con.getScoreUp()); + if(matchRival.size() >0){ + if(matchRival.size()<5){ + //需要填充机器人 + matchRival.forEach(n->{ arenaRank.add(Integer.valueOf(n.getValue()));}); + arenaRank.addAll(SArenaRobotConfig.getSArenaRobotConfigsByRangeAndCount(con.getScoreLow(),con.getScoreUp(),5 - matchRival.size())); + }else{ + //随机出五个真人 + List matchRivalList = new ArrayList(); + matchRival.forEach(n->{matchRivalList.add(n.getValue());}); + Collections.shuffle(matchRivalList); + matchRivalList.subList(0,5).forEach(n->arenaRank.add(Integer.valueOf(n))); + } + }else{ + arenaRank.addAll(SArenaRobotConfig.getSArenaRobotConfigsByRangeAndCount(con.getScoreLow(),con.getScoreUp(),5)); + } //正常从排行榜中匹配 - Set arenaRank = new HashSet(); - int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue(); + //Set arenaRank = new HashSet(); + /*int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue(); String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup)); if (myRank == -1) { Set arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, 95, 100); @@ -248,16 +267,16 @@ public class CrossYuxulundaoLogic { arenaRank.addAll(arenaRank1); arenaRank.addAll(arenaRank2); } - } + }*/ arenaRank.forEach(n -> { - if (Integer.valueOf(n) > 1000) { - arenaEnemies.add(new ArenaEnemy(Integer.valueOf(n), 0, 0)); + if (n > 1000) { + arenaEnemies.add(new ArenaEnemy(n, 0, 0)); } else { - CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), n, CrossArenaEnemy.class); + /*CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), n, CrossArenaEnemy.class); if (mapEntry != null) { arenaEnemies.add(new ArenaEnemy(Integer.valueOf(mapEntry.getEnemyId()), 1, 0)); - } - + }*/ + arenaEnemies.add(new ArenaEnemy(n, 1, 0)); } }); } @@ -374,7 +393,9 @@ public class CrossYuxulundaoLogic { .setHead(arenaRecord.getHead()).setServerName(arenaRecord.getServerName()) .setUserName(arenaRecord.getUserName()) .setHeadFrame(arenaRecord.getHeadFrame()) - .setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build(); + .setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()) + .addAllYxldMyForce(arenaRecord.getYxldMyForce()) + .addAllYxldDefForce(arenaRecord.getYxldDefForce()).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 a605ab467..f268699e0 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 @@ -676,7 +676,9 @@ public class FightUtil { //本服玩家 User user = UserManager.getUser(csPlayer.getUserId()); List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId, new ArrayList<>()); - arenaRecord.setAttackForce(arenaRecord.getAttackForce() + HeroLogic.getInstance().calTeamTotalForce(user, teamId, false)); + int addforce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); + arenaRecord.setAttackForce(arenaRecord.getAttackForce() + addforce); + arenaRecord.getYxldDefForce().add(addforce); for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) { Hero hero = user.getHeroManager().getHeroMap().get(teamPosHeroInfo.getHeroId()); if (hero == null) { @@ -710,7 +712,9 @@ public class FightUtil { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } List teamPosHeroInfos = crossArenaManager.getTeams().getOrDefault(teamId, new ArrayList<>()); - arenaRecord.setAttackForce(arenaRecord.getAttackForce() + crossArenaManager.getTotalForceByTeam().get(teamId)); + int addforcerpc = crossArenaManager.getTotalForceByTeam().get(teamId); + arenaRecord.getYxldDefForce().add(addforcerpc); + arenaRecord.setAttackForce(arenaRecord.getAttackForce() + addforcerpc); 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()); 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 index 0843b207d..8886c9bf4 100644 --- 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 @@ -6,11 +6,9 @@ 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; @@ -50,7 +48,7 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{ @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() + /*CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() .setRank(index) .setParam1(0) .setParam2(getParam2(data.getScore())) @@ -69,16 +67,14 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{ .setRankInfo(everyRankInfo) .setServerName(serverName) .setSex(0).setCrossScore(mapEntry.getEnemyStatus()); - builder.addRanks(everyRank); + 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); } diff --git a/tablemanager/src/main/java/config/SArenaRobotConfig.java b/tablemanager/src/main/java/config/SArenaRobotConfig.java index d3cda29bd..015718676 100644 --- a/tablemanager/src/main/java/config/SArenaRobotConfig.java +++ b/tablemanager/src/main/java/config/SArenaRobotConfig.java @@ -4,10 +4,7 @@ import manager.STableManager; import manager.Table; import rpc.protocols.CommonProto; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Table(name ="ArenaRobotConfig") public class SArenaRobotConfig implements BaseConfig { @@ -96,8 +93,23 @@ public class SArenaRobotConfig implements BaseConfig { } - public static List getSArenaRobotConfigsByPool( int poolId) { - return sArenaRobotConfigByPoolMap.get(poolId); + /** + * 根据玉虚积分取机器人 + * @param start + * @param end + * @param count + * @return + */ + + public static List getSArenaRobotConfigsByRangeAndCount( int start,int end,int count) { + List robotIdList = new ArrayList(); + for (SArenaRobotConfig config:sArenaRobotConfigMap.values()) { + if(config.getMsScroe() >= start && config.getMsScroe()<= end ){ + robotIdList.add(config.getId()); + } + } + Collections.shuffle(robotIdList); + return robotIdList.subList(0,count); } public static Map getsArenaRobotConfigMap() { @@ -243,4 +255,8 @@ public class SArenaRobotConfig implements BaseConfig { public void setYxldTotalForce3(int yxldTotalForce3) { this.yxldTotalForce3 = yxldTotalForce3; } + + public static List getSArenaRobotConfigsByPool( int poolId) { + return sArenaRobotConfigByPoolMap.get(poolId); + } } \ No newline at end of file