diff --git a/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java b/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java index 13737848a..d186906cf 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java +++ b/fightmanager/src/main/java/com/ljsd/fight/ArenaRecord.java @@ -35,6 +35,23 @@ public class ArenaRecord { private int headFrame;//头像框 + //玉虚论道相关 + private byte[] yxldFightData1; + + private byte[] yxldFightData2; + + private byte[] yxldFightData3; + + private String serverName; + + private int yxldBattleType;// 战斗类行 1:进攻成功 2:进攻失败 3:防守成功 4:防守失败 + + private int yxldScoreChange; + + private int[] yxldResult;//0,1 成功 失败 + + private int practiceLevel; + public ArenaRecord() { } @@ -165,4 +182,68 @@ public class ArenaRecord { public int getHeadFrame() { return headFrame; } + + public byte[] getYxldFightData1() { + return yxldFightData1; + } + + public void setYxldFightData1(byte[] yxldFightData1) { + this.yxldFightData1 = yxldFightData1; + } + + public byte[] getYxldFightData2() { + return yxldFightData2; + } + + public void setYxldFightData2(byte[] yxldFightData2) { + this.yxldFightData2 = yxldFightData2; + } + + public byte[] getYxldFightData3() { + return yxldFightData3; + } + + public void setYxldFightData3(byte[] yxldFightData3) { + this.yxldFightData3 = yxldFightData3; + } + + public String getServerName() { + return serverName; + } + + public void setServerName(String serverName) { + this.serverName = serverName; + } + + public int getYxldBattleType() { + return yxldBattleType; + } + + public void setYxldBattleType(int yxldBattleType) { + this.yxldBattleType = yxldBattleType; + } + + public int getYxldScoreChange() { + return yxldScoreChange; + } + + public void setYxldScoreChange(int yxldScoreChange) { + this.yxldScoreChange = yxldScoreChange; + } + + public int getPracticeLevel() { + return practiceLevel; + } + + public void setPracticeLevel(int practiceLevel) { + this.practiceLevel = practiceLevel; + } + + public int[] getYxldResult() { + return yxldResult; + } + + public void setYxldResult(int[] yxldResult) { + this.yxldResult = yxldResult; + } } diff --git a/fightmanager/src/main/java/com/ljsd/fight/FightType.java b/fightmanager/src/main/java/com/ljsd/fight/FightType.java index 2b7cc781f..0ab0276be 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/FightType.java +++ b/fightmanager/src/main/java/com/ljsd/fight/FightType.java @@ -24,6 +24,7 @@ public enum FightType { TowerMap(18),//森罗幻境 TaSuiLingXiao(19),//踏碎凌霄 HardStage(20),//山河社稷图 + CrossYuxulundaoFight(21),//玉虚论道 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/SArenaRobotStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/SArenaRobotStaticConfig.java index 7b4841bbf..f2272ff39 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/SArenaRobotStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/SArenaRobotStaticConfig.java @@ -27,6 +27,8 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { for(SArenaRobotConfig sArenaRobotConfig : integerSArenaRobotConfigMap.values()){ List heroList = sArenaRobotConfig.getHeroList(); + List heroList2 = sArenaRobotConfig.getHeroList2(); + List heroList3= sArenaRobotConfig.getHeroList3(); int heroLevel = sArenaRobotConfig.getRoleLv(); Map heroMap = new HashMap<>(); @@ -51,8 +53,55 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { heroMap.put(heroTid,heroBuilder.build()); } sArenaRobotConfig.setHeroMapList(heroMap); + + Map heroMap2 = new HashMap<>(); + for(Integer heroTid :heroList2){ + SCHero scHero = SCHero.getsCHero().get(heroTid); + if(null ==scHero){ + throw new IllegalArgumentException("sArenaRobotConfig id "+sArenaRobotConfig.getId()+"机器人英雄模板id找不到 heroTid:"+heroTid); + } + + CommonProto.Hero.Builder heroBuilder = CommonProto.Hero.newBuilder(); + + int star = HeroLogic.getInstance().calRobotStarByLevel(heroTid,heroLevel); + int heroStarBreakId = HeroLogic.getInstance().calRobotStarBreakByLevel(heroTid,heroLevel); + int heroBreakId = HeroLogic.getInstance().calRobotBreakByLevel(heroTid,heroLevel); + + heroBuilder.setId(String.valueOf(scHero.getId())); + heroBuilder.setHeroId(scHero.getId()); + heroBuilder.setLevel(heroLevel); + heroBuilder.setStar(star); + heroBuilder.setStarBreakId(heroStarBreakId); + heroBuilder.setBreakId(heroBreakId); + heroMap2.put(heroTid,heroBuilder.build()); + } + sArenaRobotConfig.setHeroMapList2(heroMap2); + Map heroMap3 = new HashMap<>(); + for(Integer heroTid :heroList3){ + SCHero scHero = SCHero.getsCHero().get(heroTid); + if(null ==scHero){ + throw new IllegalArgumentException("sArenaRobotConfig id "+sArenaRobotConfig.getId()+"机器人英雄模板id找不到 heroTid:"+heroTid); + } + + CommonProto.Hero.Builder heroBuilder = CommonProto.Hero.newBuilder(); + + int star = HeroLogic.getInstance().calRobotStarByLevel(heroTid,heroLevel); + int heroStarBreakId = HeroLogic.getInstance().calRobotStarBreakByLevel(heroTid,heroLevel); + int heroBreakId = HeroLogic.getInstance().calRobotBreakByLevel(heroTid,heroLevel); + + heroBuilder.setId(String.valueOf(scHero.getId())); + heroBuilder.setHeroId(scHero.getId()); + heroBuilder.setLevel(heroLevel); + heroBuilder.setStar(star); + heroBuilder.setStarBreakId(heroStarBreakId); + heroBuilder.setBreakId(heroBreakId); + heroMap3.put(heroTid,heroBuilder.build()); + } + sArenaRobotConfig.setHeroMapList3(heroMap3); int totleForce = HeroLogic.getInstance().calRobotTotalForce(sArenaRobotConfig); sArenaRobotConfig.setTotalForce(totleForce); + int totleYxldForce = HeroLogic.getInstance().calRobotYxldTotalForce(sArenaRobotConfig); + sArenaRobotConfig.setYxldTotalForce(totleYxldForce); LinkedList integers = force2robotId.get(totleForce); if(integers==null){ integers =new LinkedList<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/FunctionIdEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/core/FunctionIdEnum.java index a5fd1cbc1..ed5d0c946 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/FunctionIdEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/FunctionIdEnum.java @@ -66,7 +66,7 @@ public enum FunctionIdEnum { Pokemon(79,null,MessageTypeProto.MessageType.POKEMON_COMONPENT_LEVELUP_REQUEST_VALUE,MessageTypeProto.MessageType.POKEMON_ADVANCED_REQUEST_VALUE), World_Arena(82,new WorldArenaFunction()), HongMeng(86,null), - CrossYuxulundao(87,null),//跨服-玉虚论道 + CrossYuxulundao(111,null),//跨服-玉虚论道 WeekGood(9091,null), ; 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 c80181e05..140147b12 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 @@ -352,6 +352,8 @@ public class RedisKey { //玉虚论道 public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 public static final String CROSS_YUXULUNDAO_ROBOT_INFO = "CROSS_YUXULUNDAO_ROBOT_INFO";//机器人信息 + public static final String CROSS_YUXULUNDAO_RECORD = "CROSS_YUXULUNDAO_RECORD";//战斗回放 + public static Set familyKey = new HashSet<>(); @@ -404,6 +406,8 @@ public class RedisKey { familyKey.add(MATCHED_VERSION); familyKey.add(SERVER_LEVEL_RANK); familyKey.add(SERVER_SPLIT_INFO); + familyKey.add(CROSS_YUXULUNDAO_RANK); + familyKey.add(CROSS_YUXULUNDAO_RECORD); 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 ac8e97fa9..495105b71 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 @@ -1326,7 +1326,10 @@ public class RedisUtil { RedisKey.GUILD_INFO_CACHE.equals(type)||RedisKey.SERVER_SPLIT_INFO.equals(type)|| RedisKey.SERVER_SPLIT_MAIL_INFO.equals(type)||RedisKey.CROSS_ARENA_ROBOT_INFO.equals(type)|| 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.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) + ) { return type + RedisKey.Delimiter_colon + key; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 17d429beb..57ed51144 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -342,5 +342,6 @@ public interface BIReason { int QIMENDUNJIA_DRAW = 1103;//奇门遁甲 int QIMENDUNJIA_DRAW_CONSUME = 1104;//奇门遁甲消耗 + int CROSS_YUXULUNDAO_DAILYREWARD = 1105;//玉虚论道 } \ No newline at end of file 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 new file mode 100644 index 000000000..7abd82a32 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxululndaoChallengeBeforeTeamHandler.java @@ -0,0 +1,52 @@ +package com.ljsd.jieling.handler.crossServer; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import org.assertj.core.util.Lists; +import rpc.protocols.ArenaInfoProto; +import rpc.protocols.MessageTypeProto; + +import java.util.List; + +public class CrossYuxululndaoChallengeBeforeTeamHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeRequest; + } + + @Override + public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeRequest request) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + if (user == null) { + return; + } + //ArenaManager arenaManager = user.getArenaManager(); + int myId = request.getPlayerId(); + int defId = request.getDefId(); + //玉虚论道 + List yuxuTeamId = Lists.newArrayList(); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE); + ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeResponse.newBuilder(); + + if (!CrossYuxulundaoLogic.limitOpen(user)) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeResponse.getNumber(), res.build(), true); + return; + } + if (defId <= 1000) { + res.setDefTeamInfo(PlayerLogic.getInstance().getCrossOneTeamInfo(defId, null, yuxuTeamId)); + } else { + res.setDefTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(defId, yuxuTeamId)); + } + res.setMyTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(myId, yuxuTeamId)); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeResponse.getNumber(), res.build(), true); + } +} 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 new file mode 100644 index 000000000..338067820 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoBattleRecordHandler.java @@ -0,0 +1,56 @@ +package com.ljsd.jieling.handler.crossServer; + +import com.google.gson.Gson; +import com.ljsd.fight.ArenaRecord; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import rpc.protocols.ArenaInfoProto; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; + +import java.util.List; + +/** + * 玉虚论道查看战斗记录 + */ +public class CrossYuxulundaoBattleRecordHandler extends BaseHandler { + + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordRequest; + } + + @Override + public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoBattleRecordRequest request) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + if (user == null) { + return; + } + ArenaInfoProto.CrossYuXuLunDaoBattleRecordResponse.Builder builder = ArenaInfoProto.CrossYuXuLunDaoBattleRecordResponse.newBuilder(); + if (!CrossYuxulundaoLogic.limitOpen(user)) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordResponse.getNumber(), builder.build(), true); + return; + } + RedisUtil redisUtil = RedisUtil.getInstence(); + + //String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false); + String key = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false); + List list = redisUtil.lGet(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), 0, -1); + + for (String record : list) { + ArenaRecord arenaRecord = new Gson().fromJson(record, ArenaRecord.class); + CommonProto.crossYxldPlayerRecordInfo info = CrossYuxulundaoLogic.getCrossYxldPlayerRecordInfo(arenaRecord); + builder.addRecordData(info); + } + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordResponse.getNumber(), builder.build(), true); + + } +} 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 6947ed91c..35b236a6d 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,9 +1,51 @@ package com.ljsd.jieling.handler.crossServer; +import com.google.gson.Gson; +import com.ljsd.fight.ArenaRecord; +import com.ljsd.fight.FightType; +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.handler.gtw.GetWorldArenaChallengeRequestHandler; +import com.ljsd.jieling.logic.GlobleSystemLogic; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.ArenaEnemy; +import com.ljsd.jieling.logic.dao.ArenaManager; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.FightDispatcher; +import com.ljsd.jieling.logic.fight.FightUtil; +import com.ljsd.jieling.logic.fight.GameFightType; +import com.ljsd.jieling.logic.fight.PVPFightEvent; +import com.ljsd.jieling.logic.fight.result.FightResult; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.logic.rank.RankContext; +import com.ljsd.jieling.logic.rank.RankEnum; +import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SArenaRobotConfig; +import config.SArenaSetting; +import config.SMServerArenaSetting; +import config.SMServerRankConfig; +import manager.STableManager; +import org.assertj.core.util.Lists; import rpc.protocols.ArenaInfoProto; +import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; +import util.TimeUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; public class CrossYuxulundaoChallengeHandler extends BaseHandler { @@ -14,11 +56,299 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler teamId = request.getTeamIdList(); + int defUid = request.getChallengeUid(); + int type = request.getChallengeType(); + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2); + if (type == 0) { + //免费挑战 + int privId = setting.getPrivId()[0]; + if (!PlayerLogic.getInstance().checkAndUpdate(user, privId, 1)) { + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + } else if (type == 1) { + //物品消耗挑战 + int[] itemCost = setting.getCost(); + int[][] comItemCost = new int[1][]; + comItemCost[0] = itemCost; + boolean enough = ItemUtil.itemCost(user, comItemCost, BIReason.CROSS_YUXULUNDAO_DAILYREWARD, 0); + if (!enough) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + } + List yuxuTeamId = Lists.newArrayList(); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE); + //找出被挑战者信息 + ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.newBuilder(); + if (!CrossYuxulundaoLogic.limitOpen(user)) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeResponse.getNumber(), res.build(), true); + return; + } + int[] result; + ArenaRecord arenaRecord = null; + if (defUid <= 1000) { + //机器人 + result = getFightResultByPersonToRobot(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), res); + } else { + //真人 + arenaRecord = new ArenaRecord(); + arenaRecord.setAttackId(user.getId()); + arenaRecord.setDefUid(defUid); + result = getFightResultByPersonToPerson(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), arenaRecord, res); + //主动挑战回放记录 + /*Map redPackageMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(user.getId()), String.class, ArenaRecord.class); + int index = 1; + if(redPackageMap != null || redPackageMap.size() !=0){ + index = redPackageMap.keySet().stream().mapToInt(n->Integer.parseInt(n)).max().getAsInt()+1; + } + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_YUXULUNDAO_RECORD,String.valueOf(user.getId()),String.valueOf(index),arenaRecord); + //被挑战的真人记录 + Map defUidMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(defUid), String.class, ArenaRecord.class); + int indexDefUid = 1; + if(redPackageMap != null || redPackageMap.size() !=0){ + indexDefUid = defUidMap.keySet().stream().mapToInt(n->Integer.parseInt(n)).max().getAsInt()+1; + } + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_YUXULUNDAO_RECORD,String.valueOf(defUid),String.valueOf(indexDefUid),arenaRecord); +*/ + } + long winCount = Arrays.stream(result).boxed().filter(n -> n == 1).count(); + if (defUid > 1000) { + if (arenaRecord != null) { + if (winCount >= 2) { + //攻击者赢了 + arenaRecord.setYxldBattleType(1); + arenaRecord.setYxldScoreChange(+25); + } else { + arenaRecord.setYxldBattleType(2); + arenaRecord.setYxldScoreChange(-25); + } + arenaRecord.setYxldResult(result); + //挑战者记录 + RedisUtil redisUtil = RedisUtil.getInstence(); + String key2 = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(user.getId()), false); + long defLenth = redisUtil.lGetListSize(key2); + if (defLenth > 20) { + redisUtil.lPop(key2); + } + arenaRecord.setCreateTime(TimeUtils.nowInt()); + //arenaRecord.setUserName(); + String defarenaRecordJson = new Gson().toJson(arenaRecord); + redisUtil.lSet(key2, defarenaRecordJson); + if (winCount >= 2) { + //防守方输了了 + arenaRecord.setYxldBattleType(4); + arenaRecord.setYxldScoreChange(-25); + } else { + //防守方赢了 + arenaRecord.setYxldBattleType(3); + arenaRecord.setYxldScoreChange(+25); + } + //被挑战者记录 + arenaRecord.setCreateTime(TimeUtils.nowInt()); // 时间 + arenaRecord.setAttackId(user.getId()); //id + arenaRecord.setLevel(user.getPlayerInfoManager().getLevel()); //等级 + arenaRecord.setHead(user.getPlayerInfoManager().getHead()); //头像 + arenaRecord.setUserName(user.getPlayerInfoManager().getNickName()); //名字 + arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());//头像框 + arenaRecord.setPracticeLevel(user.getHeroManager().getPracticeLevel());//修行等级 + int[] newResult = new int[3]; + for (int i = 0; i < result.length; i++) { + newResult[i] = result[i] ^ 1; + } + arenaRecord.setYxldResult(newResult); + int myforce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false) + HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false) + HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false); + arenaRecord.setAttackForce(myforce); //总战斗力 + String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(defUid), false); + long def = redisUtil.lGetListSize(key); + if (def > 20) { + redisUtil.lPop(key); + } + String arenaRecordJson = new Gson().toJson(arenaRecord); + redisUtil.lSet(key, arenaRecordJson); + } + } + List enemyList = arenaManager.getCrossYuxulundaoEnemies(); + enemyList.forEach(n -> res.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(), 0, 0))); + ArenaOfUser myQuery = CrossServiceLogic.getInstance().query(user.getId()); + ArenaOfUser defQuery = CrossServiceLogic.getInstance().query(defUid); + int defScore;//对手分数 + AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType()); + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (winCount >= 2) { + //赢了 自己加积分 对方减积分 + res.setMyScore(25); + res.setDefScore(-25); + myQuery.getPlayerManager().setCrossYuxulundaoNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore() + 25); + myQuery.getPlayerManager().setCrossYuxulundaoOldScore(myQuery.getPlayerManager().getCrossYuxulundaoOldScore() + 25); + rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), 25); + if (defUid >= 1000) { + if (defQuery.getPlayerManager().getCrossYuxulundaoNewScore() >= 25) { + defQuery.getPlayerManager().setCrossYuxulundaoNewScore(defQuery.getPlayerManager().getCrossYuxulundaoNewScore() - 25); + rank.incrementRankScore(defUid, String.valueOf(crossGroup), -25); + } + } + } else { + res.setMyScore(-25); + res.setDefScore(25); + //输了 自己减积分 对方加积分 + if (myQuery.getPlayerManager().getCrossYuxulundaoNewScore() >= 25) { + myQuery.getPlayerManager().setCrossYuxulundaoNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore() - 25); + myQuery.getPlayerManager().setCrossYuxulundaoOldScore(myQuery.getPlayerManager().getCrossYuxulundaoOldScore() - 25); + rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), -25); + } + if (defUid >= 1000) { + defQuery = CrossServiceLogic.getInstance().query(defUid); + defQuery.getPlayerManager().setCrossYuxulundaoNewScore(defQuery.getPlayerManager().getCrossYuxulundaoNewScore() + 25); + rank.incrementRankScore(defUid, String.valueOf(crossGroup), 25); + } + } + int id = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore()); + if (myQuery.getPlayerManager().getCrossYxldMaxLevel() < id) { + //首次爬升到该位置发奖励 + if (SMServerRankConfig.serverRankConfig.containsKey(id)) { + SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(id); + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD); + res.addDrop(drop); + myQuery.getPlayerManager().setCrossYxldMaxLevel(id); + } + } + res.setMyNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore()); + if (myQuery != null) { + CrossServiceLogic.getInstance().update(myQuery); + } + if (defQuery != null) { + CrossServiceLogic.getInstance().update(defQuery); + } + int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue(); + res.setMyRank(myRank); + int privId = STableManager.getConfig(SMServerArenaSetting.class).get(2).getPrivId()[0]; + int changeTimes = user.getPlayerInfoManager().getVipPrivilageValue(privId); + res.setChangedTimes(changeTimes); + List dailyReward = user.getArenaManager().getCrossYuxulundaoDailyRewad(); + if (changeTimes == 1 && dailyReward.get(0) == 0) { + dailyReward.set(0, 1); + } else if (changeTimes == 3 && dailyReward.get(1) == 0) { + dailyReward.set(1, 1); + } else if (changeTimes == 5 && dailyReward.get(2) == 0) { + dailyReward.set(2, 1); + } + //改变挑战领取宝箱状态 + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeResponse.getNumber(), res.build(), true); } + + public static int[] getFightResultByPersonToPerson(User myUser, int defUserUid, int[] myteamId, int[] defTeamId, ArenaRecord arenaRecord, ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder builder) throws Exception { + int[] result = new int[3]; + ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(defUserUid); + arenaRecord.setCreateTime(TimeUtils.nowInt()); // 时间 + arenaRecord.setAttackId(arenaOfUser.getId()); //id + arenaRecord.setLevel(arenaOfUser.getPlayerManager().getLevel()); //等级 + arenaRecord.setHead(arenaOfUser.getPlayerManager().getHead()); //头像 + arenaRecord.setUserName(arenaOfUser.getPlayerManager().getName()); //名字 + arenaRecord.setHeadFrame(arenaOfUser.getPlayerManager().getHeadFrame());//头像框 + arenaRecord.setPracticeLevel(arenaOfUser.getPlayerManager().getPracticeLevel()); + int sumForce = 0; + for (int team : defTeamId) { + if (team != 0) { + sumForce += arenaOfUser.getHeroManager().getTotalForceByTeam().getOrDefault(team, 0); + } + } + arenaRecord.setAttackForce(sumForce); //总战斗力 + arenaRecord.setServerName(CrossServiceLogic.getInstance().getServerNameByUId(defUserUid)); + for (int i = 0; i < 3; i++) { + //编队为空 判输赢 + if (!updateResult(i, myteamId, defTeamId, result)) { + continue; + } + CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(myUser, myteamId[i], null, null); + //修行等级 区服名称 战斗类行 积分变化情况 + CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(arenaOfUser, defTeamId[i]); + FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(myUser.getId(), defUserUid, + fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), true); + int seed = fightResult.getSeed(); + CommonProto.FightData build = CommonProto.FightData.newBuilder() + .setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime()) + .setFightSeed(seed) + .setHeroFightInfos(fightResult.getFightTeamInfo()) + .addMonsterList(fightResult.getDefFightTeamInfo()) + .setFightType(FightType.CrossYuxulundaoFight.getType()) + .setFightId(FightUtil.getFightId(myUser.getId(), FightType.CrossYuxulundaoFight.getType())) + .build(); + builder.addFightData(build); + result[i] = (int) fightResult.getCheckResult()[0]; + //数据互换 + byte[] snapRecord = build.toByteArray(); + if (i == 0) { + arenaRecord.setYxldFightData1(snapRecord); + } else if (i == 1) { + arenaRecord.setYxldFightData2(snapRecord); + } else if (i == 2) { + arenaRecord.setYxldFightData3(snapRecord); + } + } + builder.addAllFightResult(Arrays.stream(result).boxed().collect(Collectors.toList())); + return result; + } + + public static boolean updateResult(int i, int[] myteamId, int[] defTeamId, int[] result) { + if (myteamId[i] == 0 || defTeamId[i] == 0) { + if (myteamId[i] == 0 && defTeamId[i] == 0) { + result[i] = 0; + } + if (myteamId[i] == 1 && defTeamId[i] == 0) { + result[i] = 1; + } + if (myteamId[i] == 0 && defTeamId[i] == 1) { + result[i] = 0; + } + return false; + } + return true; + } + + public int[] getFightResultByPersonToRobot(User myUser, int defUserUid, int[] myteamId, int[] defTeamId, ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder builder) throws Exception { + int[] result = new int[3];//1赢 0输 + for (int i = 0; i < 3; i++) { + //编队为空 判输赢 + if (!updateResult(i, myteamId, defTeamId, result)) { + continue; + } + PVPFightEvent pvpFightEvent = new PVPFightEvent(myUser.getId(), myteamId[i], SArenaSetting.getSArenaSetting().getMostTime(), "", + GameFightType.CrossYuxulundaoFight, defUserUid, defTeamId[i]); + + int myforce = HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false) + HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false) + HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false); + SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(defUserUid); + //战力的先后手 + if (sArenaRobotConfig != null && myforce < sArenaRobotConfig.getTotalForce()) { + pvpFightEvent.setRever(true); + } + + FightResult fightResult = FightDispatcher.dispatcher(pvpFightEvent); + CommonProto.FightTeamInfo fightTeamInfo = fightResult.getFightTeamInfo(); + CommonProto.FightTeamInfo deffightTeamInfo = fightResult.getDefFightTeamInfo(); + //设置战斗随机种子 + int seed = fightResult.getSeed(); + CommonProto.FightData build = CommonProto.FightData.newBuilder() + .setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime()) + .setFightSeed(seed) + .setHeroFightInfos(fightTeamInfo) + .addMonsterList(deffightTeamInfo) + .setFightType(FightType.CrossYuxulundaoFight.getType()) + .setFightId(FightUtil.getFightId(myUser.getId(), FightType.ArenaFight.getType())) + .build(); + builder.addFightData(build); + result[i] = (int) fightResult.getCheckResult()[0]; + //builder.addFightResult((int) fightResult.getCheckResult()[0]); + } + builder.addAllFightResult(Arrays.stream(result).boxed().collect(Collectors.toList())); + return result; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoDailyRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoDailyRewardHandler.java new file mode 100644 index 000000000..f23deca0f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoDailyRewardHandler.java @@ -0,0 +1,85 @@ +package com.ljsd.jieling.handler.crossServer; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.ArenaManager; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SMServerArenaSetting; +import config.SMServerRankConfig; +import manager.STableManager; +import rpc.protocols.ArenaInfoProto; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; + +import java.util.Map; + +public class CrossYuxulundaoDailyRewardHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardRequest; + } + + @Override + public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardRequest request) throws Exception { + + int uid = session.getUid(); + User user = UserManager.getUser(uid); + if (user == null) { + return; + } + int type = request.getType()-1; + ArenaManager arenaManager = user.getArenaManager(); + if (arenaManager == null) { + return; + } + ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardResponse.newBuilder(); + + if (!CrossYuxulundaoLogic.limitOpen(user)) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true); + return; + } + if (arenaManager.getCrossYuxulundaoDailyRewad().get(type) != 1) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true); + return; + } + Map robotConfigMap = STableManager.getConfig(SMServerRankConfig.class); + if (!robotConfigMap.containsKey(arenaManager.getCrossYuxulundaoNewLevelId())) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true); + return; + } + SMServerRankConfig config = robotConfigMap.get(arenaManager.getCrossYuxulundaoNewLevelId()); + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2); + int privId = setting.getPrivId()[0]; + if (!user.getArenaManager().getCrossYuxulundaoDailyRewad().contains(type)) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true); + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + if (user.getArenaManager().getCrossYuxulundaoDailyRewad().get(type) == 1) { + int[][] itemArr = new int[1][2]; + itemArr[0][0] = config.getDailyReward()[type][1]; + itemArr[0][1] = config.getDailyReward()[type][2]; + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, itemArr, BIReason.CROSS_YUXULUNDAO_DAILYREWARD); + res.setIsSuccess(true); + res.setDrop(drop); + user.getArenaManager().getCrossYuxulundaoDailyRewad().set(type, 2); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.build(), true); + } + /* if(user.getPlayerInfoManager().getVipPrivilageValue(privId) >= config.getDailyReward()[type][0]){ + int[][] itemArr = new int[1][2]; + itemArr[0][0] = config.getDailyReward()[type][1]; + itemArr[0][1] =config.getDailyReward()[type][2]; + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, itemArr, BIReason.CROSS_YUXULUNDAO_DAILYREWARD); + res.setIsSuccess(true); + res.setDrop(drop); + //MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), builder.build(), true); + }*/ + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoEnemyInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoEnemyInfoHandler.java index e7e6654fb..6bc20719b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoEnemyInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoEnemyInfoHandler.java @@ -1,10 +1,21 @@ package com.ljsd.jieling.handler.crossServer; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.ArenaEnemy; +import com.ljsd.jieling.logic.dao.ArenaManager; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; import rpc.protocols.ArenaInfoProto; import rpc.protocols.MessageTypeProto; +import java.util.List; + +/** + * 跨服-玉虚论道 换一批 + */ public class CrossYuxulundaoEnemyInfoHandler extends BaseHandler { @Override @@ -14,12 +25,21 @@ public class CrossYuxulundaoEnemyInfoHandler extends BaseHandler enemyList = arenaManager.getCrossYuxulundaoEnemies(); + enemyList.forEach(n->builder.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(),0,0))); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChangeEnemyInfoResponse.getNumber(), builder.build(), true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoGetInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoGetInfoHandler.java index bdacbb2de..079d84403 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoGetInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoGetInfoHandler.java @@ -1,16 +1,32 @@ package com.ljsd.jieling.handler.crossServer; import com.ljsd.jieling.core.FunctionIdEnum; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.GlobalDataManaager; +import com.ljsd.jieling.logic.GlobleSystemLogic; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.ArenaEnemy; +import com.ljsd.jieling.logic.dao.ArenaManager; import com.ljsd.jieling.logic.dao.TimeControllerOfFunction; import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SMServerArenaSetting; +import config.SMServerRankConfig; +import manager.STableManager; import rpc.protocols.ArenaInfoProto; +import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; +import java.util.List; + /** * 玉虚论道 页面数据请求 */ @@ -22,34 +38,88 @@ public class CrossYuxulundaoGetInfoHandler extends BaseHandler= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()){ + long yuxulundaoTime = arenaManager.getCrossYuxulundaoFirst(); + TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.CrossYuxulundao); + if (null == timeControllerOfFunction) { + return; + } + if (yuxulundaoTime >= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()) { builder.setIsFirst(false); - - }else { + //CrossYuxulundaoLogic.getInstance().matchRivals(user); + } else { //赛季内第一次登陆请求 builder.setIsFirst(true); - user.getPlayerInfoManager().setCrossYuxulundaoFirst(System.currentTimeMillis()); - //TODO 重置段位发奖 - CrossYuxulundaoLogic.getInstance().resetSeason(user); + arenaManager.setCrossYuxulundaoFirst(System.currentTimeMillis()); + //重置段位发奖 + int id = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore()); + if (SMServerRankConfig.serverRankConfig.containsKey(id)) { + SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(id); + int resetId = serverRankConfig.getResetRankID(); + for (int i = resetId; i <= id; i++) { + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD); + builder.addDrop(drop); + } + myQuery.getPlayerManager().setCrossYuxulundaoNewScore(SMServerRankConfig.serverRankConfig.get(resetId).getScoreLow()); + } + arenaManager.setCrossMatchTimes(0); + CrossYuxulundaoLogic.getInstance().matchRivals(user); } - - - - - - + List enemyList = arenaManager.getCrossYuxulundaoEnemies(); + if (enemyList != null && enemyList.size() > 0) { + enemyList.forEach(n -> builder.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(), 0, 0))); + } + if (myQuery != null) { + int oldScore = myQuery.getPlayerManager().getCrossYuxulundaoOldScore(); + int newScore = myQuery.getPlayerManager().getCrossYuxulundaoNewScore(); + //被打后是否加分了 + int id = SMServerRankConfig.getIdByScore(newScore); + if (myQuery.getPlayerManager().getCrossYxldMaxLevel() < id) { + //首次爬升到该位置发奖励 + int oldLevel = SMServerRankConfig.getIdByScore(oldScore); + for(int i=oldLevel+1;i<=id;i++){ + if (SMServerRankConfig.serverRankConfig.containsKey(i)) { + SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(i); + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD); + builder.addUpdrop(drop); + } + } + myQuery.getPlayerManager().setCrossYxldMaxLevel(id); + } + builder.setOldMyscore(oldScore); + builder.setNewMyscore(newScore); + if (oldScore != newScore) { + myQuery.getPlayerManager().setCrossYuxulundaoOldScore(newScore); + } + } + //builder.setFreeTimes(5); + builder.addAllDailyRewardState(arenaManager.getCrossYuxulundaoDailyRewad()); + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2); + int privId = setting.getPrivId()[0]; + builder.setChangedTimes(user.getPlayerInfoManager().getVipPrivilageValue(privId)); + int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue(); + builder.setMyRank(myRank); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), builder.build(), true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoTeamInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoTeamInfoHandler.java new file mode 100644 index 000000000..d0e498a45 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossYuxulundaoTeamInfoHandler.java @@ -0,0 +1,60 @@ +package com.ljsd.jieling.handler.crossServer; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import org.assertj.core.util.Lists; +import rpc.protocols.ArenaInfoProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.List; + +/** + * 玉虚论道:每个人的详细信息 + */ +public class CrossYuxulundaoTeamInfoHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.GetPlayerCrossYxldOneTeamInfoRequest; + } + @Override + public void processWithProto(ISession session, PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoRequest request) throws Exception{ + int uid = session.getUid(); + User user = UserManager.getUser(uid); + if(user == null){ + return; + } + PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = null; + int playerId = request.getPlayerId(); + int serverId = request.getServerId(); + //玉虚论道 + if(!CrossYuxulundaoLogic.limitOpen(user)){ + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().build(), true); + return; + } + List yuxuTeamId = Lists.newArrayList(); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO); + yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE); + if(playerId <= 1000){ + //机器人 + //res = PlayerLogic.getInstance().getCrossOneTeamInfo(playerId,null,yuxuTeamId); + playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(PlayerLogic.getInstance().getCrossOneTeamInfo(playerId,null,yuxuTeamId)); + }else{ + //真人. + playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder() + .setTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(playerId,yuxuTeamId)); + } + + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GetPlayerCrossYxldOneTeamInfoResponse.getNumber(),playerTeamInfo.build(),true); + } +} + + 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 4e9dbdde5..aa0840da2 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 @@ -166,6 +166,16 @@ public class CrossServiceLogic { List firstTeam = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.FORMATION_NORMAL,new ArrayList<>()); teams.put(GlobalsDef.FORMATION_NORMAL,firstTeam); set.addAll(firstTeam); + //玉虚论道编队 + List yxldOne = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE,new ArrayList<>()); + teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE,yxldOne); + set.addAll(yxldOne); + List yxldTwo = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO,new ArrayList<>()); + teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO,yxldTwo); + set.addAll(yxldTwo); + List yxldTree = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE,new ArrayList<>()); + teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE,yxldTree); + set.addAll(yxldTree); // 英雄 Map heroes = new HashMap<>(); Map heroMap = user.getHeroManager().getHeroMap(); 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 88380a491..b9b6f7303 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 @@ -1,30 +1,43 @@ package com.ljsd.jieling.logic.arena; +import com.ljsd.GameApplication; +import com.ljsd.fight.ArenaRecord; +import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.GlobalDataManaager; import com.ljsd.jieling.logic.GlobleSystemLogic; -import com.ljsd.jieling.logic.dao.CrossArenaEnemy; -import com.ljsd.jieling.logic.dao.PlayerManager; -import com.ljsd.jieling.logic.dao.TimeControllerOfFunction; -import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; +import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; +import com.ljsd.jieling.logic.family.CrossDeathPathLogic; import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.rank.RankContext; import com.ljsd.jieling.logic.rank.RankEnum; import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank; import config.SArenaRobotConfig; import config.SMServerArenaSetting; +import config.SMServerRankConfig; +import config.SMServerRankReward; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.aggregation.ArrayOperators; import rpc.protocols.CommonProto; +import util.StringUtil; import util.TimeUtils; +import java.net.UnknownHostException; import java.util.*; import java.util.stream.Collectors; + import com.ljsd.jieling.logic.dao.root.User; /** @@ -53,12 +66,9 @@ public class CrossYuxulundaoLogic { private int season;//0:挑战阶段 1:结算阶段 - //初始化机器人信息 - private void initRank() { - + public void initRank() { int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if (crossGroup == -1) { return; } @@ -68,7 +78,10 @@ public class CrossYuxulundaoLogic { return; } //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_RECORD, String.valueOf(crossGroup)); + RedisUtil.getInstence().del(key1, key2, key3); AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType()); int robotIndex = 100; Random random = new Random(); @@ -89,52 +102,32 @@ public class CrossYuxulundaoLogic { rank.addRank(robotIndex, String.valueOf(crossGroup), 100 - robotIndex); SArenaRobotConfig config = SArenaRobotConfig.getsArenaRobotConfigById(robotIds.get(robotIndex)); robotInfo.put(String.valueOf(robotIndex), new CrossArenaEnemy(robotIds.get(robotIndex), robotIndex, groupList.get(server), 0, 0, random.nextBoolean(), PlayerLogic.getInstance().getRandomName2WithOutVerify(), config.getTotalForce(), config.getRoleLv())); - } LOGGER.info("跨服玉虚论道初始化结束"); RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo); } - private void checkState() { - long now = System.currentTimeMillis(); - TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.CrossYuxulundao); - if (null == timeControllerOfFunction) { + public void sendReward() { + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (crossGroup == -1) { return; } - long diff = (System.currentTimeMillis() - timeControllerOfFunction.getStartTime()) / 1000; - SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2); - if (diff >= setting.getBattleTime()[0] && diff <= setting.getBattleTime()[1]) { - - } else if (diff > setting.getBattleTime()[1] && diff <= setting.getRestTime()[1]) { - - } else if (diff > setting.getRestTime()[1]) { + String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, 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++) { + SMServerRankReward config = SMServerRankReward.getIdByScore(i + 1); + try { + MailLogic.getInstance().sendMail(arenaRankfilt.get(0), "玉虚论道排名奖励", "恭喜您在本次玉虚论道荣获" + (i + 1) + "名,请及时领取附件中的排名奖励!", + StringUtil.parseArrayToString(config.getSeasonReward()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + //TODO 跑马灯 + //ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,String.valueOf(equipId),0,0,0,0,0); + } catch (Exception e) { + e.printStackTrace(); + } } - - - } - - - //0-1-2 准备阶段 -活动挑战阶段 - 发奖阶段 - private void readying() { - if (state != BATTLE_STATE) { - LOGGER.info("玉虚论道:准备阶段,nowstate:{} to BATTLE_STATE", state); - initRank(); - setState(BATTLE_STATE); - - } - - - } - - private void chanllege() { - - } - - private void sendReward() { - - } public int getSeason() { @@ -163,44 +156,114 @@ public class CrossYuxulundaoLogic { } + public void setMatchRivals(User user) { + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (crossGroup == -1) { + return; + } + Set robotIds = new HashSet<>(5); + PlayerManager player = user.getPlayerInfoManager(); + ArenaManager arenaManager = user.getArenaManager(); + int curLevel = arenaManager.getCrossYuxulundaoNewLevelId();//当前段位 + List arenaEnemies = new ArrayList<>(); //得存储 + + + Map robotConfigMap = STableManager.getConfig(SMServerRankConfig.class); + if (!robotConfigMap.containsKey(curLevel)) { + return; + } + int[] timePool = robotConfigMap.get(curLevel).getFitRobotPool(); + if (arenaManager.getCrossMatchTimes() < timePool[0]) { + //匹配机器人 + List robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n -> n.getPoolId() == timePool[1]).collect(Collectors.toList()); + Collections.shuffle(robotConfig); + robotConfig.subList(0, robotIds.size()).forEach(n -> robotIds.add(n.getId())); + for (int robot : robotIds) { + arenaEnemies.add(new ArenaEnemy(robot, 1, 0)); + } + arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1); + arenaManager.setArenaEnemies(arenaEnemies); + } else { + //TODO 次数超过后怎么匹配真人 真人不足怎么办 匹配真人的规则 + } + + } /** * 匹配实力相近队手 */ - public void matchRivals(User user){ - - Set robotIds = new HashSet<>(5); - PlayerManager player = user.getPlayerInfoManager(); - int curLevel = player.getCrossYuxulundaoNewLevelId();//当前段位 - if(curLevel < 7){ - //什么段位以下全是机器人 - player.getCrossYuxulundaoNewLevelId(); - int poolId =0; - List robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n->n.getPoolId() == poolId).collect(Collectors.toList()); - robotConfig.subList(0,robotIds.size()).forEach(n->robotIds.add(n.getId())); - }else { - //正常按排行榜算 - - + public void matchRivals(User user) throws Exception { + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (crossGroup == -1) { + return; } + Set robotIds = new HashSet<>(5); + ArenaManager arenaManager = user.getArenaManager(); + ArenaOfUser myQuery = CrossServiceLogic.getInstance().query(user.getId()); + int curId = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore()); + List arenaEnemies = new ArrayList<>(); //得存储 + Map robotConfigMap = STableManager.getConfig(SMServerRankConfig.class); + if (!robotConfigMap.containsKey(curId)) { + return; + } + int[] timePool = robotConfigMap.get(curId).getFitRobotPool(); + if (arenaManager.getCrossMatchTimes() < timePool[0]) { + //匹配机器人 + List robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n -> n.getPoolId() == timePool[1]).collect(Collectors.toList()); + Collections.shuffle(robotConfig); + robotConfig.subList(0, 5).forEach(n -> robotIds.add(n.getId())); + for (int robot : robotIds) { + arenaEnemies.add(new ArenaEnemy(robot, 1, 0)); + } + arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1); + } else { + //正常从排行榜中匹配 + 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); + arenaRank.addAll(arenaRank1); + } else { + if (myRank < 4) { + //score =3 + if (myRank - 1 > 0) { + Set arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, 0, myRank - 2); + arenaRank.addAll(arenaRank1); + Set arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, myRank, myRank + (5 - myRank)); + arenaRank.addAll(arenaRank2); + } else if (myRank - 1 == 0) { + Set arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, 1, 6); + arenaRank.addAll(arenaRank2); + } + } else { + //比他低的三个 比他高的两个 + Set arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, myRank - 3, myRank - 1); + Set arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, myRank, myRank + 3); + arenaRank.addAll(arenaRank1); + arenaRank.addAll(arenaRank2); + } + } + arenaRank.forEach(n -> { + if (Integer.valueOf(n) > 1000) { + arenaEnemies.add(new ArenaEnemy(Integer.valueOf(n), 0, 0)); + } else { + 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)); + } - - - - - - - - - + } + }); + } + arenaManager.setCrossYuxulundaoEnemies(arenaEnemies); } - /** * 获取匹配队手信息 */ - public static CommonProto.ArenaPersonInfo getMatchRivalInfo(int enemyId, int rank, int score) throws Exception { + public static CommonProto.ArenaPersonInfo getMatchRivalInfo(int enemyId, int rank, int score) { Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); if (robotConfigMap.containsKey(enemyId)) { SArenaRobotConfig sArenaRobotConfig = robotConfigMap.get(enemyId); @@ -210,37 +273,91 @@ public class CrossYuxulundaoLogic { .setName(sArenaRobotConfig.getRobotName()) .setHead(0) .setRank(rank) - .setTotalForce(sArenaRobotConfig.getTotalForce()) //三个队伍的总战力 TODO + .setTotalForce(sArenaRobotConfig.getYxldTotalForce()) //三个队伍的总战力 .setHeadFrame(0) .setScore(score) .build(); return personInfoBuild; } - User user = UserManager.getUser(enemyId, true); - if (null == user) { + //其他服务器玩家 + ArenaOfUser arenaOfUser = null; + try { + arenaOfUser = CrossServiceLogic.getInstance().query(enemyId); + } catch (Exception e) { + e.printStackTrace(); return null; } - int totalForceOne = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false); - int totalForceTwo = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false); - int totalForceThree = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false); - PlayerManager playerInfoManager = user.getPlayerInfoManager(); + if (arenaOfUser == null) { + return null; + } + String serverName = CrossServiceLogic.getInstance().getServerNameByUId(enemyId); CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder() .setUid(enemyId) - .setLevel(playerInfoManager.getLevel()) - .setName(playerInfoManager.getNickName()) - .setHead(playerInfoManager.getHead()) + .setLevel(arenaOfUser.getPlayerManager().getLevel()) + .setName(arenaOfUser.getPlayerManager().getName()) + .setServername(serverName) + .setTotalForce(arenaOfUser.getHeroManager().getTotalForce()) + .setUserTitle(arenaOfUser.getPlayerManager().getUserTitle()) + .setUserMount(arenaOfUser.getPlayerManager().getUserMount()) + .setGender(arenaOfUser.getPlayerManager().getGender()) + .setUserSkin(arenaOfUser.getPlayerManager().getSkin()) + .setPracticeLevel(arenaOfUser.getPlayerManager().getPracticeLevel()) + .setScore(arenaOfUser.getPlayerManager().getCrossYuxulundaoNewScore()) .setRank(rank) - .setTotalForce(totalForceOne + totalForceTwo + totalForceThree) - .setHeadFrame(playerInfoManager.getHeadFrame()) - .setScore(score) - .setUserMount(playerInfoManager.getUserMount()) - .setUserSkin(playerInfoManager.getUserSkin()) - .setUserTitle(playerInfoManager.getUserTitle()) - .setGender(playerInfoManager.getSex()) - .setPracticeLevel(user.getHeroManager().getPracticeLevel()) .build(); return personInfoBuild; } + public static boolean limitOpen(User user) throws Exception { + //等级 开服多少周 跨服分组 + return true; + /*int level = user.getPlayerInfoManager().getLevel(); + if(level<40){ + throw new ErrorCodeException(ErrorCode.UNKNOWN); + return false; + } + long lastOrUnderHour = TimeUtils.getLastOrUnderHour(GameApplication.serverConfig.getCacheOpenTime(), 1, 0, 0, true); + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1); + if(setting==null){ + //throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + lastOrUnderHour+=TimeUtils.WEEK*(setting.getOpenWeek()-1); + if(TimeUtils.now() result = null;// + if (arenaRecord.getYxldResult() == null) { + result = new ArrayList(); + result.add(0); + result.add(0); + result.add(0); + }else{ + result = Arrays.stream(arenaRecord.getYxldResult()).boxed().collect(Collectors.toList()); + } + return CommonProto.crossYxldPlayerRecordInfo.newBuilder().setTime(arenaRecord.getCreateTime()) + .setUid(arenaRecord.getAttackId()) + .addAllResult(result) + .setMyScoreChange(arenaRecord.getYxldScoreChange()) + .setLevel(arenaRecord.getLevel()) + .setHead(arenaRecord.getHead()) + .setUserName(arenaRecord.getUserName()) + .setHeadFrame(arenaRecord.getHeadFrame()).setFightData1(fightDataProto1).setFightData2(fightDataProto2).setFightData3(fightDataProto3) + .setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ArenaManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ArenaManager.java index 3cf2cd7f3..ef19a293c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ArenaManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ArenaManager.java @@ -29,6 +29,18 @@ public class ArenaManager extends MongoBase { private List arenaEnemies; private List hadTakeReward; + private List crossYuxulundaoEnemies; + + + //跨服 玉虚论道 + private long crossYuxulundaoFirst; //是否当前赛季第一次请求 + private int crossYuxulundaoOldScore = 1; + private int crossYuxulundaoNewScore = 1; + private int crossYuxulundaoOldLevelId = 1; + private int crossYuxulundaoNewLevelId = 1; + private int crossMatchTimes;//换一匹对手次数 + private List crossYuxulundaoDailyRewad = new ArrayList<>(Arrays.asList(0,0,0)); //日常奖励状态 + public void updateChallenge(int fightResult){ if(fightResult == 1){ successNums ++; @@ -134,4 +146,76 @@ public class ArenaManager extends MongoBase { updateString("costDallyTime",costDallyTime); this.costDallyTime = costDallyTime; } + + public List getCrossYuxulundaoEnemies() { + return crossYuxulundaoEnemies; + } + + public void setCrossYuxulundaoEnemies(List crossYuxulundaoEnemies) { + updateString("crossYuxulundaoEnemies",crossYuxulundaoEnemies); + this.crossYuxulundaoEnemies = crossYuxulundaoEnemies; + } + + public long getCrossYuxulundaoFirst() { + return crossYuxulundaoFirst; + } + + public void setCrossYuxulundaoFirst(long crossYuxulundaoFirst) { + this.crossYuxulundaoFirst = crossYuxulundaoFirst; + updateString("crossYuxulundaoFirst",crossYuxulundaoFirst); + } + + public int getCrossYuxulundaoOldScore() { + return crossYuxulundaoOldScore; + } + + public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) { + this.crossYuxulundaoOldScore = crossYuxulundaoOldScore; + updateString("crossYuxulundaoOldScore",crossYuxulundaoOldScore); + } + + public int getCrossYuxulundaoNewScore() { + return crossYuxulundaoNewScore; + } + + public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) { + this.crossYuxulundaoNewScore = crossYuxulundaoNewScore; + updateString("crossYuxulundaoNewScore",crossYuxulundaoNewScore); + } + + public int getCrossYuxulundaoOldLevelId() { + return crossYuxulundaoOldLevelId; + } + + public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) { + this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId; + updateString("crossYuxulundaoOldLevelId",crossYuxulundaoOldLevelId); + } + + public int getCrossYuxulundaoNewLevelId() { + return crossYuxulundaoNewLevelId; + } + + public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) { + this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId; + updateString("crossYuxulundaoNewLevelId",crossYuxulundaoNewLevelId); + } + + public int getCrossMatchTimes() { + return crossMatchTimes; + } + + public void setCrossMatchTimes(int crossMatchTimes) { + this.crossMatchTimes = crossMatchTimes; + updateString("crossMatchTimes",crossMatchTimes); + } + + public List getCrossYuxulundaoDailyRewad() { + return crossYuxulundaoDailyRewad; + } + + public void setCrossYuxulundaoDailyRewad(List crossYuxulundaoDailyRewad) { + this.crossYuxulundaoDailyRewad = crossYuxulundaoDailyRewad; + updateString("crossYuxulundaoDailyRewad",crossYuxulundaoDailyRewad); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 4a5e8f84a..5fb92ba3b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -167,14 +167,6 @@ public class PlayerManager extends MongoBase { //是否拿到渠道服和猕猴桃 预约首发邮件; private boolean isGetOrderMail; - //跨服 玉虚论道 - private long crossYuxulundaoFirst; //是否当前赛季第一次请求 - private int crossYuxulundaoOldScore; - private int crossYuxulundaoNewScore; - private int crossYuxulundaoOldLevelId; - private int crossYuxulundaoNewLevelId; - - public PlayerManager(){ this.setRootCollection(User._COLLECTION_NAME); } @@ -1141,48 +1133,5 @@ public class PlayerManager extends MongoBase { updateString("isGetOrderMail",isGetOrderMail); } - public long getCrossYuxulundaoFirst() { - return crossYuxulundaoFirst; - } - public void setCrossYuxulundaoFirst(long crossYuxulundaoFirst) { - this.crossYuxulundaoFirst = crossYuxulundaoFirst; - updateString("crossYuxulundaoFirst",crossYuxulundaoFirst); - } - - public int getCrossYuxulundaoOldScore() { - return crossYuxulundaoOldScore; - } - - public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) { - this.crossYuxulundaoOldScore = crossYuxulundaoOldScore; - updateString("crossYuxulundaoOldScore",crossYuxulundaoOldScore); - } - - public int getCrossYuxulundaoNewScore() { - return crossYuxulundaoNewScore; - } - - public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) { - this.crossYuxulundaoNewScore = crossYuxulundaoNewScore; - updateString("crossYuxulundaoNewScore",crossYuxulundaoNewScore); - } - - public int getCrossYuxulundaoOldLevelId() { - return crossYuxulundaoOldLevelId; - } - - public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) { - this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId; - updateString("crossYuxulundaoOldLevelId",crossYuxulundaoOldLevelId); - } - - public int getCrossYuxulundaoNewLevelId() { - return crossYuxulundaoNewLevelId; - } - - public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) { - this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId; - updateString("crossYuxulundaoNewLevelId",crossYuxulundaoNewLevelId); - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java index 3c564cfd3..e1f3c9fe7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java @@ -25,6 +25,15 @@ public class ArenaOfPlayerManager { private int maxFore; + //跨服玉虚论道 分数 等级 + private int crossYuxulundaoOldScore = 0; + private int crossYuxulundaoNewScore = 0; + private int crossYuxulundaoOldLevelId = 1; + private int crossYuxulundaoNewLevelId = 1; + private int crossYxldMaxLevel; //历史达到的最高等级 + //private int crossMatchTimes;//换一匹对手次数 + + public ArenaOfPlayerManager(int uId, int level, String name, int head, int headFrame, int guildId, String guildName, int userTitle, int userMount, int practiceLevel, int serverId, String serverName, int gender, int skin, int maxFore) { this.uId = uId; this.level = level; @@ -165,4 +174,44 @@ public class ArenaOfPlayerManager { public void setMaxFore(int maxFore) { this.maxFore = maxFore; } + + public int getCrossYuxulundaoOldScore() { + return crossYuxulundaoOldScore; + } + + public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) { + this.crossYuxulundaoOldScore = crossYuxulundaoOldScore; + } + + public int getCrossYuxulundaoNewScore() { + return crossYuxulundaoNewScore; + } + + public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) { + this.crossYuxulundaoNewScore = crossYuxulundaoNewScore; + } + + public int getCrossYuxulundaoOldLevelId() { + return crossYuxulundaoOldLevelId; + } + + public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) { + this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId; + } + + public int getCrossYuxulundaoNewLevelId() { + return crossYuxulundaoNewLevelId; + } + + public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) { + this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId; + } + + public int getCrossYxldMaxLevel() { + return crossYxldMaxLevel; + } + + public void setCrossYxldMaxLevel(int crossYxldMaxLevel) { + this.crossYxldMaxLevel = crossYxldMaxLevel; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java index 19ee1787d..6303fc17f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java @@ -49,7 +49,9 @@ public enum GameFightType { CarPersonChallenge(FightType.CarBossFight,new PVPFightHandler(),null), GuildChallenge(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null), NewGeneral(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null), - TowerMap(FightType.TowerMap,new DefaultWithoutHandFightHandler(),null) + TowerMap(FightType.TowerMap,new DefaultWithoutHandFightHandler(),null), + CrossYuxulundaoFight(FightType.CrossYuxulundaoFight,new PVPFightHandler(),null) + ; 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 b0d00e959..e9b67b78f 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 @@ -1189,6 +1189,10 @@ public class HeroLogic{ if (teamId == GlobalsDef.WORLD_TEAM_ARENA_DEFENSE) { CrossServiceLogic.getInstance().dispose(user); } + //跨服 玉虚论道 + if (teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE||teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO||teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE) { + CrossServiceLogic.getInstance().dispose(user); + } user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size()); MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); } @@ -3022,7 +3026,6 @@ public class HeroLogic{ return totalForce; } - public int calRobotTotalForce( SArenaRobotConfig sArenaRobotConfig){ int totalForce =0; List heroList = sArenaRobotConfig.getHeroList(); @@ -3036,6 +3039,31 @@ public class HeroLogic{ } return totalForce; } + public int calRobotYxldTotalForce( SArenaRobotConfig sArenaRobotConfig){ + int totalForce =0; + List heroList = sArenaRobotConfig.getHeroList(); + List heroList2 = sArenaRobotConfig.getHeroList2(); + List heroList3 = sArenaRobotConfig.getHeroList3(); + int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId(); + int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv(); + int heroLevel = sArenaRobotConfig.getRoleLv(); + for(Integer heroTid :heroList){ + SCHero scHero = SCHero.getsCHero().get(heroTid); + Map robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true); + totalForce+=calForce(robotHeroAttribute); + } + for(Integer heroTid :heroList2){ + SCHero scHero = SCHero.getsCHero().get(heroTid); + Map robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true); + totalForce+=calForce(robotHeroAttribute); + } + for(Integer heroTid :heroList3){ + SCHero scHero = SCHero.getsCHero().get(heroTid); + Map robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true); + totalForce+=calForce(robotHeroAttribute); + } + return totalForce; + } public void calPercent(int[][] otherAttriMap,Map heroAttributeMap){ for(int[] item : otherAttriMap){ 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 f12bb1318..0916df0a5 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 @@ -658,24 +658,75 @@ public class PlayerLogic { } //跨服三队伍 - public PlayerInfoProto.GetPlayerOneTeamInfoResponse getCrossOneTeamInfo( int id,CrossArenaEnemy info,List crossTeamId) throws Exception { + public CommonProto.TeamOneInfo getCrossOneTeamInfo( int id,CrossArenaEnemy info,List crossTeamId) throws Exception { if(id==0){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(id); - CommonProto.TeamOneInfo.Builder oneInfo; + CommonProto.TeamOneInfo.Builder oneInfo = null; if(sArenaRobotConfig!=null){ - oneInfo = getRobotOneInfo(sArenaRobotConfig,info); + oneInfo = getYuxuRobotOneInfo(sArenaRobotConfig,info,crossTeamId); }else{ - oneInfo = getUserTeamOneInfo(id, crossTeamId); + /*oneInfo = getUserTeamOneInfo(id, crossTeamId); if(UserManager.getUser(id).getFriendManager().getMyApplyFriends().contains(id)){ oneInfo.setIsApplyed(1); - } + }*/ } - PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(oneInfo); - return playerTeamInfo.build(); + //PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(oneInfo); + return oneInfo.build(); + } + //玉虚论道 + private CommonProto.TeamOneInfo.Builder getYuxuRobotOneInfo(SArenaRobotConfig sArenaRobotConfig,CrossArenaEnemy info,List crossTeamId){ + CommonProto.TeamOneInfo.Builder oneInfo=getYuxuRobotTeamInfo(sArenaRobotConfig,crossTeamId); + if(info!=null){ + oneInfo.setName(info.getRandomName()); + } + return oneInfo; + } + + public CommonProto.TeamOneInfo.Builder getYuxuRobotTeamInfo(SArenaRobotConfig sArenaRobotConfig,List crossTeamId){ + CommonProto.TeamOneInfo.Builder oneInfo = CommonProto.TeamOneInfo.newBuilder() + .setLevel(sArenaRobotConfig.getRobotLevel()) + .setName(sArenaRobotConfig.getRobotName()) + .setUid(sArenaRobotConfig.getId()).setCrossTeamScore(sArenaRobotConfig.getMsScroe()).setServerName("S10"); + + //CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + if(sArenaRobotConfig.getDifferDemonsId()!=null){ +// for(int pokenId:sArenaRobotConfig.getDifferDemonsId()){ +// teamInfo.addPokemonInfos(null); +// } + } + //玉虚论道三队伍 + for(int id :crossTeamId){ + int position = 1; + CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE){ + for(Map.Entry item : sArenaRobotConfig.getHeroMapList().entrySet()){ + Integer heroTid = item.getKey(); + Integer heroStar = item.getValue().getStar(); + teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build()); + } + }else if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO){ + for(Map.Entry item : sArenaRobotConfig.getHeroMapList2().entrySet()){ + Integer heroTid = item.getKey(); + Integer heroStar = item.getValue().getStar(); + teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build()); + } + + }else if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE){ + for(Map.Entry item : sArenaRobotConfig.getHeroMapList3().entrySet()){ + Integer heroTid = item.getKey(); + Integer heroStar = item.getValue().getStar(); + teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build()); + } + } + teamInfo.setTotalForce(sArenaRobotConfig.getTotalForce()); + oneInfo.addCrossTeam(teamInfo); + } + //oneInfo.setTeam(teamInfo); + return oneInfo; } //跨服三队伍 public CommonProto.TeamOneInfo.Builder getUserTeamOneInfo(int uid,List crossTeamId) throws Exception { @@ -780,6 +831,51 @@ public class PlayerLogic { PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(builder.build()); return playerTeamInfo.build(); } + //获取跨服玩家信息 + public CommonProto.TeamOneInfo getCrossYxldOneTeamInfo(int id,List team) throws Exception { + ArenaOfUser query = CrossServiceLogic.getInstance().query(id); + if(query==null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + CommonProto.TeamOneInfo.Builder builder = CommonProto.TeamOneInfo.newBuilder() + .setHead(query.getPlayerManager().getHead()) + .setHeadFrame(query.getPlayerManager().getHeadFrame()) + .setUserTitle(query.getPlayerManager().getUserTitle()) + .setLevel(query.getPlayerManager().getLevel()) + .setName(query.getPlayerManager().getName()) + .setGuildName(query.getPlayerManager().getGuildName()) + .setPracticeLevel(query.getPlayerManager().getPracticeLevel()) + .setUid(id).setCrossTeamScore(query.getPlayerManager().getCrossYuxulundaoNewScore()); + for(int teamId: team){ + CommonProto.TeamOneTeamInfo.Builder teamOneTeamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + List teamPosHeroInfos = query.getHeroManager().getTeams().get(teamId); + if(teamPosHeroInfos!=null){ + for (TeamPosHeroInfo heroInfo:teamPosHeroInfos) { + ArenaOfHero hero = query.getHeroManager().getHeros().get(heroInfo.getHeroId()); + teamOneTeamInfo.addTeam(CBean2Proto.getCrossSimpleHero(hero,heroInfo.getPosition())); + } + } + for(Map.Entry entry:query.getPokemons().entrySet()){ + teamOneTeamInfo.addPokemonInfos(CBean2Proto.getSimpleTeamInfoByPokeMon(entry.getValue(), entry.getKey())); + } + LOGGER.info("=====================跨服获取阵容:{}",teamId); + Integer integer = query.getHeroManager().getTotalForceByTeam().getOrDefault(teamId,0); + teamOneTeamInfo.setTotalForce(integer); + for(Map.Entry entry:query.getSeals().entrySet()){ + PurpleMansionSeal value = entry.getValue(); + ArenaOfHero arenaOfHero = query.getHeroManager().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()); + + } + //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); 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 2d5e48589..faa2a15b6 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 @@ -283,7 +283,7 @@ public abstract class AbstractRank implements IRank { .setForce(query.getPlayerManager().getMaxFore()) .setSex(query.getPlayerManager().getGender()) .setHead(query.getPlayerManager().getHead()) - .setGuildName(mapEntry.getName()) + .setGuildName("xuexinpeng") .setHeadFrame(query.getPlayerManager().getHeadFrame()) .setUserMount(query.getPlayerManager().getUserMount()) .setUserSkin(query.getPlayerManager().getSkin()) 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 f17564634..85912a6b7 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 @@ -1,9 +1,24 @@ 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.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 org.springframework.data.redis.core.ZSetOperations; +import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; import util.TimeUtils; +import java.util.Set; + /** * 玉虚论道排行榜 */ @@ -25,9 +40,87 @@ public class CrossYuXuLunDaoRank extends AbstractRank{ @Override public double getScore(double... data) { - return data[0]+ TimeUtils.getDoubleTime(); + 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); + builder.addRanks(everyRank); + }else{ + ArenaOfUser query = CrossServiceLogic.getInstance().query(Integer.valueOf(data.getValue())); + CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() + .setRank(index) + .setParam1(query.getHeroManager().getTotalForce()) + .setParam2(getParam2(data.getScore())) + .setParam3(getParam3(data.getScore())); + CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo); + builder.addRanks(everyRank); + } + } + + @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(getParam2(zSetScore)) + .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/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index 2285e9446..ab343e712 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -20,6 +20,7 @@ import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.event.MinuteTaskEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.arena.ArenaLogic; +import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; import com.ljsd.jieling.logic.dao.GuildMyInfo; import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.UserManager; @@ -102,12 +103,13 @@ public class MinuteTask extends Thread { e.printStackTrace(); LOGGER.error("Exception::=>{}",e.toString()); } -// try { -// fiveMinuteOnlineSend(); -// }catch (Exception e){ -// e.printStackTrace(); -// LOGGER.error("Exception::=>{}",e.toString()); -// } + try { + //周日23.50执行 + everySundaySpecialClockTask(); + }catch (Exception e){ + e.printStackTrace(); + LOGGER.error("Exception::=>{}",e.toString()); + } try { CheckFight.getInstance().luaHotFix(); MongoUtil.getInstence().lastUpdate(); @@ -115,6 +117,8 @@ public class MinuteTask extends Thread { QuestionLogic.getInstence().checkQuestion(); MailLogic.getInstance().checkReadyToMail(); CrossDeathPathLogic.getInstance().sendChangeIndicationByCross(); + //TODO + //CrossYuxulundaoLogic.getInstance().initRank(); }catch (Exception e){ e.printStackTrace(); LOGGER.error("Exception::=>{}",e.toString()); @@ -159,7 +163,6 @@ public class MinuteTask extends Thread { e.printStackTrace(); LOGGER.error("Exception::=>{}",e.toString()); } - LOGGER.info("MinuteTask end..."); } catch (Exception e) { LOGGER.error("e",e); @@ -200,6 +203,9 @@ public class MinuteTask extends Thread { try { GlobleSystemLogic.getInstence().calCulRank(); ArenaLogic.getInstance().sendReward(GlobalsDef.ARENA_DAILY_REWARD); + if(calendar.get(Calendar.DAY_OF_WEEK)==1){ + CrossYuxulundaoLogic.getInstance().initRank();//玉虚论道重置 + } Map guildInfoMap = GuilidManager.guildInfoMap; for(Map.Entry guildInfoEntry:guildInfoMap.entrySet()){ RedisUtil.getInstence().del(RedisKey.getKey(RedisKey.GUILD_RED_PACKAGE_RANK,String.valueOf(guildInfoEntry.getKey()),false)); @@ -273,6 +279,20 @@ public class MinuteTask extends Thread { } } + //每周日23.50执行 + public void everySundaySpecialClockTask() throws Exception { + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int w = calendar.get(Calendar.DAY_OF_WEEK) - 1; + if(w == 1 &&hour == 23 && minute ==50){ + LOGGER.info("everySundaySpecialClockTask yuxulundao send reward start ..."); + //玉虚论道23.50分执行 + CrossYuxulundaoLogic.getInstance().sendReward(); + LOGGER.info("everySundaySpecialClockTask yuxulundao send reward end ..."); + } + } + diff --git a/tablemanager/src/main/java/config/SArenaRobotConfig.java b/tablemanager/src/main/java/config/SArenaRobotConfig.java index a72e0ec2c..3b5abe2aa 100644 --- a/tablemanager/src/main/java/config/SArenaRobotConfig.java +++ b/tablemanager/src/main/java/config/SArenaRobotConfig.java @@ -21,8 +21,16 @@ public class SArenaRobotConfig implements BaseConfig { private int[] roleId; + private int[] roleId2; + + private int[] roleId3; + private List heroList; + private List heroList2; + + private List heroList3; + private int roleLv; private int[] differDemonsId; @@ -33,6 +41,8 @@ public class SArenaRobotConfig implements BaseConfig { private int totalForce; + private int yxldTotalForce; + private int breakId; private int starBreakId; @@ -41,10 +51,16 @@ public class SArenaRobotConfig implements BaseConfig { private Map heroMapList; + private Map heroMapList2; + private Map heroMapList3; + private static Map> sArenaRobotConfigByPoolMap; private static Map sArenaRobotConfigMap; + private int msScroe; + + @Override public void init() throws Exception { @@ -60,7 +76,21 @@ public class SArenaRobotConfig implements BaseConfig { for(int heroId : roleId){ heroListTmp.add(heroId); } + //玉虚论道第二个队伍 + int[] roleId2 = sArenaRobotConfig.getRoleId2(); + List heroListTmp2 = new ArrayList<>(roleId.length); + for(int heroId : roleId2){ + heroListTmp2.add(heroId); + } + //第三个队伍 + int[] roleId3 = sArenaRobotConfig.getRoleId2(); + List heroListTmp3 = new ArrayList<>(roleId.length); + for(int heroId : roleId3){ + heroListTmp3.add(heroId); + } sArenaRobotConfig.setHeroList(heroListTmp); + sArenaRobotConfig.setHeroList2(heroListTmp2); + sArenaRobotConfig.setHeroList3(heroListTmp3); result.get(poolId).add(sArenaRobotConfig); } sArenaRobotConfigByPoolMap = result; @@ -96,7 +126,15 @@ public class SArenaRobotConfig implements BaseConfig { return roleId; } - public int getRoleLv() { + public int[] getRoleId2() { + return roleId2; + } + + public int[] getRoleId3() { + return roleId3; + } + + public int getRoleLv() { return roleLv; } @@ -139,4 +177,48 @@ public class SArenaRobotConfig implements BaseConfig { public void setHeroMapList(Map heroMapList) { this.heroMapList = heroMapList; } + + public Map getHeroMapList2() { + return heroMapList2; + } + + public void setHeroMapList2(Map heroMapList2) { + this.heroMapList2 = heroMapList2; + } + + public Map getHeroMapList3() { + return heroMapList3; + } + + public void setHeroMapList3(Map heroMapList3) { + this.heroMapList3 = heroMapList3; + } + + public List getHeroList2() { + return heroList2; + } + + public void setHeroList2(List heroList2) { + this.heroList2 = heroList2; + } + + public List getHeroList3() { + return heroList3; + } + + public void setHeroList3(List heroList3) { + this.heroList3 = heroList3; + } + + public int getMsScroe() { + return msScroe; + } + + public int getYxldTotalForce() { + return yxldTotalForce; + } + + public void setYxldTotalForce(int yxldTotalForce) { + this.yxldTotalForce = yxldTotalForce; + } } \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SMServerArenaSetting.java b/tablemanager/src/main/java/config/SMServerArenaSetting.java index aad0f7d1d..72705738c 100644 --- a/tablemanager/src/main/java/config/SMServerArenaSetting.java +++ b/tablemanager/src/main/java/config/SMServerArenaSetting.java @@ -44,6 +44,8 @@ public class SMServerArenaSetting implements BaseConfig { private int worldLevLimit; + private int[] privId; + private int treasureOpen; @Override public void init() throws Exception { @@ -122,4 +124,12 @@ public class SMServerArenaSetting implements BaseConfig { public int getWorldLevLimit() { return worldLevLimit; } + + public int[] getPrivId() { + return privId; + } + + public int getTreasureOpen() { + return treasureOpen; + } } \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SMServerRankConfig.java b/tablemanager/src/main/java/config/SMServerRankConfig.java index de0004aa6..57682c9f4 100644 --- a/tablemanager/src/main/java/config/SMServerRankConfig.java +++ b/tablemanager/src/main/java/config/SMServerRankConfig.java @@ -24,12 +24,26 @@ public class SMServerRankConfig implements BaseConfig { private int scoreUp; - + private int resetRankID; + + private int[] fitRobotPool; + + public static Map serverRankConfig; @Override public void init() throws Exception { + + serverRankConfig = STableManager.getConfig(SMServerRankConfig.class); } + public static int getIdByScore(int score){ + for(Map.Entry keyVal :serverRankConfig.entrySet()){ + if(score>=keyVal.getValue().getScoreLow()&&score<=keyVal.getValue().getScoreUp()){ + return keyVal.getKey(); + } + } + return 0; + } public int getId() { return id; @@ -63,5 +77,13 @@ public class SMServerRankConfig implements BaseConfig { return scoreUp; } + public int getResetRankID() { + return resetRankID; + } + + public int[] getFitRobotPool() { + return fitRobotPool; + } + } \ No newline at end of file