From 9aef38cdc7c387bbd89f9231005a0333c8a2172c Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Wed, 8 Jul 2020 19:27:13 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E4=B8=8B=E7=BA=BF=E6=B8=85=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/OnlineUserManager.java | 5 +++ .../ljsd/jieling/logic/dao/UserManager.java | 33 +++++++++++++++++-- .../ljsd/jieling/thread/task/MinuteTask.java | 1 + 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java index 25f2b0f63..b578f0c4f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.network.session.ISession; import org.springframework.data.redis.support.collections.DefaultRedisMap; @@ -15,6 +16,10 @@ public class OnlineUserManager { public static Map sessionMap = new ConcurrentHashMap<>(); + public static void checkOnline(){ + UserManager.checkOffline(); + } + public static void userOffline(int uid) { sessionMap.remove(uid); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 62f937977..f37f52b85 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -7,6 +7,7 @@ import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; +import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.event.NewWelfareEvent; import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum; @@ -15,30 +16,56 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.network.server.SessionManager; import com.ljsd.jieling.util.ItemUtil; import config.SGameSetting; import config.SPlayerLevelConfig; import manager.STableManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import util.TimeUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; public class UserManager { - + private static final Logger LOGGER = LoggerFactory.getLogger(UserManager.class); private static Map userMap = new ConcurrentHashMap<>(); - + private static Map userMapPutTime = new ConcurrentHashMap<>(); //离线读入 public static void addUser(User user) { userMap.put(user.getId(), user); + userMapPutTime.put(user.getId(),TimeUtils.now()); } public static boolean isUserExist(int uid) { return userMap.containsKey(uid); } + //离线清除逻辑 + public static void checkOffline(){ + try { + Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); + long l = System.currentTimeMillis(); + collect.forEach(integerUserEntry -> { + long offLineTime = integerUserEntry.getPlayerInfoManager().getOffLineTime(); + if(offLineTime7*60*1000&& userMapPutTime.getOrDefault(integerUserEntry.getId(),0L)>7*60*100){ + userMap.remove(integerUserEntry.getId()); + userMapPutTime.remove(integerUserEntry.getId()); + } + }); + }catch (Exception e){ + LOGGER.error(e.toString()); + } + } + public static User userLogin(int uid,String openId,String channel,int pid,int gid) throws Exception { User user = null; if (!UserManager.isUserExist(uid)){ @@ -131,7 +158,7 @@ public class UserManager { if(canNull){ return null; } - throw new Exception("UserManager::getUser null exception"); + throw new Exception("UserManager::getUser null exception"+user.getId()); } UserManager.addUser(user); return user; 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 c43e7924b..24bbdf3fb 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 @@ -84,6 +84,7 @@ public class MinuteTask extends Thread { RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size())); DeathPathLogic.getInstance().statusCheck(); GuildFightLogic.minuteCheckForCarFight(); + OnlineUserManager.checkOnline(); LOGGER.info("MinuteTask end..."); } catch (Exception e) { LOGGER.error("e",e); From 5ed7417c706c25b3a74d95bcbcdcef0626416260 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Sat, 25 Jul 2020 22:01:51 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=B7=85=E5=B3=B0=E8=B5=9B=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 5 +- .../handler/champion/ChampinGetHandler.java | 69 +- .../champion/ChampionBetInfoHandler.java | 63 +- .../champion/ChampionGetMyAllBetHandler.java | 89 +- .../champion/ChampionGetMyHistoryHandler.java | 70 +- .../champion/ChampionGetWorldRankHandler.java | 63 +- .../champion/ChampionGuessHandler.java | 8 +- .../champion/ChampionViewFinalHandler.java | 47 +- .../ljsd/jieling/logic/blood/BloodLogic.java | 3 +- .../logic/championship/ChampionshipLogic.java | 1155 ++++++++--------- .../ljsd/jieling/logic/dao/ArenaRecord.java | 14 +- .../jieling/logic/dao/FamilyHeroInfo.java | 20 +- .../ljsd/jieling/logic/dao/UserManager.java | 2 +- .../ljsd/jieling/logic/family/GuildLogic.java | 2 +- .../ljsd/jieling/logic/fight/AreFightPro.java | 47 +- .../ljsd/jieling/logic/fight/CombatLogic.java | 8 +- .../jieling/logic/fight/FightDispatcher.java | 3 +- .../ljsd/jieling/logic/fight/FightUtil.java | 8 +- .../jieling/logic/fight/PVPFightEvent.java | 9 + .../com/ljsd/jieling/util/FightDataUtil.java | 12 +- 20 files changed, 1060 insertions(+), 637 deletions(-) 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 3948db1c4..d40aafe83 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 @@ -219,6 +219,7 @@ public class RedisKey { public final static String CHAMPION_FIGHT = "CHAMPION_FIGHT"; public final static String CHAMPION_RANK = "CHAMPION_RANK"; public final static String CHAMPION_JOIN = "CHAMPION_JOIN"; + public final static String CHAMPION_JOIN_SELECT = "CHAMPION_JOIN_SELECT"; public final static String CHAMPION_ARENA_RECORD = "CHAMPION_ARENA_RECORD"; public final static String CHAMPION_CUR_JOIN_IDS = "CHAMPION_CUR_JOIN_IDS"; public final static String CHAMPION_FINAL32_JOIN_IDS = "CHAMPION_FINAL32_JOIN_IDS"; @@ -235,10 +236,12 @@ public class RedisKey { public final static String CHAMPION_BET_MINE = "CHAMPION_BET_MINE"; // 我的竞猜 selectIdForRedis value: winUid public final static String CHAMPION_BET_DETAIL = "CHAMPION_BET_DETAIL"; // 我的竞猜 selectUid + ":" +winUid public final static String CHAMPION_BET_ALL = "CHAMPION_BET_ALL"; // 竞猜信息 selectUid + ":" +winUid - public final static String CHAMPION_FINAL_RECODED_IDS = "CHAMPION_FINAL_RECODED_IDS"; // 巅峰赛決賽信息 + public final static String CHAMPION_FINAL_RECODED_IDS = "CHAMPION_FINAL_RECODED_IDS"; // 巅峰赛決賽信息 //没发现什么用 public final static String CHAMPION_GUESSS_UIDS = "CHAMPION_GUESSS_UIDS"; // 巅峰赛发送竞猜币信息 + public final static String CHAMPION_ARENA_RECORD_THREE = "CHAMPION_ARENA_RECORD_THREE";//三局两胜缓存 + public final static String PIDGIDTEMP = "PIDGIDTEMP"; public final static String GUILDBOSS_ARENA_RECORD = "GUILDBOSS_ARENA_RECORD"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java index 85d41ed60..a52a5d211 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.handler.champion; +import com.google.gson.Gson; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.BaseHandler; @@ -13,6 +14,8 @@ import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.MessageUtil; +import java.util.List; + /** * * 告知前端基本信息 * * 战斗信息 @@ -32,6 +35,9 @@ public class ChampinGetHandler extends BaseHandler { int progress = ChampionshipLogic.getProgress(); //阶段 int roundTimes = ChampionshipLogic.getRoundTimes(); //比赛进行第几轮 int endTime = ChampionshipLogic.getEndTime(); //比赛进行第几轮 + int schedule = ChampionshipLogic.getSchedule(); + int fightTime = ChampionshipLogic.getFightTime(); + int realTimes = ChampionshipLogic.getRealTimes(); //组装数据 int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CHAMPION_RANK, "", Integer.toString(uid)).intValue(); int topMaxRank = UserManager.getUser(uid).getArenaManager().getTopMaxRank(); @@ -47,18 +53,71 @@ public class ChampinGetHandler extends BaseHandler { builder.setJoinState(1); String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid)); Object latestKey = RedisUtil.getInstence().lGetIndex(key, -1); - if(latestKey!=null){ + if(latestKey!=null) { ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", latestKey.toString(), ArenaRecord.class); int enemyId = arenaRecord.getDefUid(); int attackId = arenaRecord.getAttackId(); int fightResult = arenaRecord.getFightResult(); + int roundTims = arenaRecord.getRoundTims(); CommonProto.ChampionBattleInfo.Builder builder1 = CommonProto.ChampionBattleInfo.newBuilder(); - if(roundTimes == arenaRecord.getRoundTims() && (progress%10%4 != 3 || fightResult==-2)){ - fightResult =-1; + if(schedule==1){ + if(roundTimes==roundTims&&(fightResult == -2 || !(progress % 10 == 3))){ + fightResult = -1; + } + }else { + if ((realTimes+7) == arenaRecord.getRoundTims() && (fightResult == -2 || !(progress % 10 == 3))) { + fightResult = -1; + } } - if(fightResult!=-1){ - builder1.setFightData( CommonProto.FightData.parseFrom(arenaRecord.getFightData())); + + if (fightResult != -1) { + builder1.setFightData(CommonProto.FightData.parseFrom(arenaRecord.getFightData())); } + + List strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid), 0, -1); + + int state = -1; + Gson gson = new Gson(); + for (String redisId : strings) { + ArenaRecord record = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", redisId, ArenaRecord.class); + if ((!record.getId().equals(arenaRecord.getId())) && record.getRoundTims() == roundTims) { + // System.out.println("record = " +gson.toJson(record)); + if (record.getFightResult() == 1) { + if (state == -1) { + state = 2; + } else if (state == 3) { + state = 5; + } else { + state = record.getFightResult(); + } + } else { + if (state == -1) { + state = 3; + } else if (state == 2) { + state = 4; + } else { + state = record.getFightResult(); + } + } + System.out.println(state+"record = " +gson.toJson(record)); + } + } + if(schedule==2){ + if( realTimes < 6 && roundTims - 7 != realTimes) { + builder.setLoser(true); + }else { + builder.setLoser(false); + } + }else if(schedule==1){ + if(roundTims!=roundTimes){ + builder.setLoser(true); + }else { + builder.setLoser(false); + } + } + + + builder.setProcess(state); builder.setChampionBattleInfo(builder1 .setMyInfo(ChampionshipLogic.getChampionBattleInfo(attackId)) .setEnemyInfo(ChampionshipLogic.getChampionBattleInfo(enemyId)) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java index e91f6ed55..be755046c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java @@ -14,6 +14,8 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.MessageUtil; import util.StringUtil; +import java.util.List; + /** * 获取竞猜信息 * 0 全量 1 : 只给ChampionBetInfo @@ -27,10 +29,9 @@ public class ChampionBetInfoHandler extends BaseHandler strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(arenaRecord.getAttackId()), 0,-1); + int state =-1; + for (String redisId:strings) { + ArenaRecord record = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", redisId, ArenaRecord.class); + + if((!record.getId().equals(arenaRecord.getId()))&&record.getRoundTims()==(arenaRecord.getRoundTims())){ + if(record.getFightResult()==0){ + if(state==-1){ + state=3; + }else if(state==2){ + state=4; + }else{ + state=record.getFightResult();} + }else { + if(state==-1){ + state=2; + }else if(state==3){ + state=5; + }else { + state=record.getFightResult(); + } + + } + + } + + } + +// if(state<2){ +// }else { +// fightResult= -1; +// } + String guessUidStr = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_BET_MINE, Integer.toString(uid), selectIdForRedis, String.class); if(!StringUtil.isEmpty(guessUidStr)) { myGuessID = Integer.parseInt(guessUidStr); + mineBetCoins = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_BET_DETAIL, arenaRecord.getId() + ":" + guessUidStr, Integer.toString(uid), Integer.class); } CommonProto.ChampionBattleInfo.Builder builder1 = CommonProto.ChampionBattleInfo.newBuilder() .setMyInfo( ChampionshipLogic.getChampionBattleInfo(arenaRecord.getAttackId())) @@ -58,9 +100,14 @@ public class ChampionBetInfoHandler extends BaseHandler betHistorys = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_BET_MINE, Integer.toString(uid), String.class, String.class); + ArenaInfoProto.ChampionGetAllMyBetInfoResponse.Builder builder = ArenaInfoProto.ChampionGetAllMyBetInfoResponse.newBuilder(); + if (!betHistorys.isEmpty()) { + List ids = new ArrayList<>(betHistorys.keySet()); + List arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); + Map arenaRobotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); + for (ArenaRecord arenaRecord : arenaRecords) { + int attactkUidType = arenaRobotConfigMap.containsKey(arenaRecord.getAttackId()) ? 0 : 1; + int defUidType = arenaRobotConfigMap.containsKey(arenaRecord.getDefUid()) ? 0 : 1; + CommonProto.ArenaEnemy attackEnemy = ArenaLogic.getInstance().getArenaEnemy(arenaRecord.getAttackId(), attactkUidType); + CommonProto.ArenaEnemy defEnemy = ArenaLogic.getInstance().getArenaEnemy(arenaRecord.getDefUid(), defUidType); + int fightResult = arenaRecord.getFightResult(); + int guessState = 0; + + if (schedule == 1) { + + if (arenaRecord.getRoundTims() == roundTimes) { + if (progress % 10 != 3) { + fightResult = -1; + } + if (progress % 10 == 1) { + guessState = 1; + } + } + + } else { + if ((ChampionshipLogic.getRealTimes() + 7) == arenaRecord.getRoundTims()) { + if (!(progress % 10 == 3 && fightTime == 3)) { + fightResult = -1; + } + if (progress % 10 == 1&&fightTime == 1) { + guessState = 1; + } + } + } + + if (fightResult == -2) { + fightResult = -1; + } + ArenaInfoProto.ChampionMyBetDetail.Builder betDetailBuilder = ArenaInfoProto.ChampionMyBetDetail.newBuilder(); + String guessUid = betHistorys.get(arenaRecord.getId()); + Integer mineBetCoins = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_BET_DETAIL, arenaRecord.getId() + ":" + guessUid, Integer.toString(uid), Integer.class); + int myWinCoins = 0; + if (fightResult >= 0) { + int winner = arenaRecord.getAttackId(); + int loseer = arenaRecord.getDefUid(); + if (fightResult == 0) { + winner = arenaRecord.getDefUid(); + loseer = arenaRecord.getAttackId(); + } + guessState = StringUtil.isEmpty(guessUid)?loseer:Integer.parseInt(guessUid); + if (!StringUtil.isEmpty(guessUid) && Integer.parseInt(guessUid) == winner) { + myWinCoins = (int) (1.5 * mineBetCoins); + } + } + + builder.addChampionMyBetDetails(betDetailBuilder.setBetResult(guessState) + .setEnemyPairInfo(ArenaInfoProto.ChampionTwoEnemInfo.newBuilder().setRedEnemy(defEnemy).setBlueEnemy(attackEnemy).setFightResult(fightResult).setId(arenaRecord.getId()).setRoundTimes(arenaRecord.getRoundTims())) + .setMyBetCoins(mineBetCoins) + .setMyWinCoins(myWinCoins) + + ); + } + } + + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CHAMPION_GET_MYALL_BET_RESPONSE_VALUE, builder.build(), true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java index 6e961b6d4..136820800 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java @@ -1,11 +1,27 @@ package com.ljsd.jieling.handler.champion; +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.ArenaLogic; import com.ljsd.jieling.logic.championship.ChampionshipLogic; +import com.ljsd.jieling.logic.dao.ArenaRecord; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.ArenaInfoProto; +import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.MessageUtil; +import config.SArenaRobotConfig; +import manager.STableManager; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * //查看我的战斗记录 + */ public class ChampionGetMyHistoryHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { @@ -13,7 +29,57 @@ public class ChampionGetMyHistoryHandler extends BaseHandler { } @Override - public void process(ISession iSession, PacketNetData netData) throws Exception { - ChampionshipLogic.viewAllMyBattleInfo(iSession); + public void process(ISession session, PacketNetData netData) throws Exception { + + int uid = session.getUid(); + int progress = ChampionshipLogic.getProgress(); //阶段 + int schedule = ChampionshipLogic.getSchedule(); + int roundTimes = ChampionshipLogic.getRoundTimes(); //比赛进行第几轮 + List myArenaIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid), 0, -1); + ArenaInfoProto.ChanpionGetAllMyBattleHistoryResponse.Builder builder = ArenaInfoProto.ChanpionGetAllMyBattleHistoryResponse.newBuilder(); + if (myArenaIds != null) { + List ids = new ArrayList<>(myArenaIds); + List myArenaRecordInfos = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); + Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); + for (ArenaRecord arenaRecord : myArenaRecordInfos) { + int attackUid = arenaRecord.getAttackId(); + int enemyId = arenaRecord.getDefUid(); + int fightResult = arenaRecord.getFightResult(); + int roundTims = arenaRecord.getRoundTims(); + if(schedule==1){ + if(roundTimes==roundTims){ + fightResult = -1; + } + }else { + if ((ChampionshipLogic.getRealTimes()+7) == arenaRecord.getRoundTims() &&ChampionshipLogic.getFightTime()==arenaRecord.getTurn()) { + fightResult = -1; + } + } + + if(roundTimes == arenaRecord.getRoundTims()&&arenaRecord.getId().equals(myArenaIds.get(myArenaIds.size()-1))){ + if(progress%10%4 != 3 || fightResult==-2){ + fightResult =-1; + } + } + + if (fightResult == -2) { + fightResult = -1; + } + int enemyType = robotConfigMap.containsKey(enemyId) ? 0 : 1; + int attackType = robotConfigMap.containsKey(attackUid) ? 0 : 1; + CommonProto.ArenaEnemy arenaEnemy = ArenaLogic.getInstance().getArenaEnemy(enemyId, enemyType); + CommonProto.ArenaEnemy attackInfo = ArenaLogic.getInstance().getArenaEnemy(attackUid, attackType); + ArenaInfoProto.ChampionTwoEnemInfo build = ArenaInfoProto.ChampionTwoEnemInfo.newBuilder() + .setBlueEnemy(attackInfo) + .setRedEnemy(arenaEnemy) + .setRoundTimes(arenaRecord.getRoundTims()) + .setFightResult(fightResult) + .setId(arenaRecord.getId()) + .build(); + builder.addEnemyPairInfo(build); + } + } + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CHAMPION_GET_MYHISTORY_RESPONSE_VALUE, builder.build(), true); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetWorldRankHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetWorldRankHandler.java index 25d28c9bc..8e63a0324 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetWorldRankHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetWorldRankHandler.java @@ -1,10 +1,21 @@ package com.ljsd.jieling.handler.champion; +import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; +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.championship.ChampionshipLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.ArenaInfoProto; +import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.MessageUtil; +import manager.STableManager; +import org.springframework.data.redis.core.ZSetOperations; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; public class ChampionGetWorldRankHandler extends BaseHandler { @Override @@ -13,7 +24,55 @@ public class ChampionGetWorldRankHandler extends BaseHandler arenaRankMemberInfo = new ArrayList<>(20); + + int rankEndLine = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getChampionshipPlayer(); + int myUid = session.getUid(); + CommonProto.ArenaEnemy myInfo = null; + ArenaInfoProto.ChampionGetWorldRankResponse.Builder builder = ArenaInfoProto.ChampionGetWorldRankResponse.newBuilder(); + if (start <= rankEndLine) { + Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK, "", start, end); + for (ZSetOperations.TypedTuple item : arenaRankInfo) { + String value = item.getValue(); + int uid = Integer.parseInt(value); + start++; + CommonProto.ArenaEnemy enemyInfo = ChampionshipLogic.getEnemyInfo(uid, start, 0, 0); + if (enemyInfo == null) { + start--; + continue; + } + arenaRankMemberInfo.add(enemyInfo); + if (uid == myUid) { + myInfo = enemyInfo; + } + } + } + if (myInfo == null && start <= rankEndLine) { + int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CHAMPION_RANK, "", Integer.toString(myUid)).intValue(); + if (myRank != -1) { + myInfo = ChampionshipLogic.getEnemyInfo(myUid, myRank, 0, 0); + } + } + if (myInfo != null) { + builder.setMyInfo(myInfo); + } + + ArenaInfoProto.ChampionGetWorldRankResponse buildResponse = builder.addAllRankInfos(arenaRankMemberInfo).build(); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CHAMPION_GET_RANK_RESPONSE_VALUE, buildResponse, true); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGuessHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGuessHandler.java index b937b659e..6bb4dc4a0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGuessHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGuessHandler.java @@ -42,9 +42,15 @@ public class ChampionGuessHandler extends BaseHandler>() { }.getType(); + +// if (page == 0) { +// page = 1; +// } + int start =0, end = - 1; Map> finalmemberOfTeam = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_FINAL_TEAM_INFO, "", Integer.class, valueType); Map memberPerOfTeam = new HashMap<>(); List arenaRecodeds =null; + + if(type == 1){ - arenaRecodeds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_FINAL32_JOIN_IDS, "", 0, -1); + arenaRecodeds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_FINAL32_JOIN_IDS, "", start, end); finalmemberOfTeam.forEach((k,v)->{ v.forEach(memberId->{ memberPerOfTeam.put(memberId,k); }); }); }else{ - arenaRecodeds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_FINAL4_JOIN_IDS, "", 0, -1); + arenaRecodeds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_FINAL4_JOIN_IDS, "", start, end); } List arenaIds = new ArrayList<>(arenaRecodeds); List arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", arenaIds, ArenaRecord.class); ArenaInfoProto.ChampionViewFinalResponse.Builder builder = ArenaInfoProto.ChampionViewFinalResponse.newBuilder(); String selectIdForRedis = ChampionshipLogic.getSelectIdForRedis(); + for (ArenaRecord arenaRecord : arenaRecords) { + int attackId = arenaRecord.getAttackId(); int defUid = arenaRecord.getDefUid(); + + System.out.println("attackId = " + attackId+"defUid = " + defUid); int fightResult = arenaRecord.getFightResult(); - if (arenaRecord.getRoundTims() == roundTimes && progress % 10 % 4 != 3) { - fightResult = -1; + + + if(schedule==1){ + if(arenaRecord.getRoundTims() == roundTimes&&(fightResult == -2 || !(progress % 10 == 3))){ + fightResult = -1; + } + }else { + if ((realTimes+7) == arenaRecord.getRoundTims() && (fightResult == -2 || !(progress % 10 == 3))) { + fightResult = -1; + } } + if(fightResult == -2){ fightResult = -1; } @@ -73,9 +94,19 @@ public class ChampionViewFinalHandler extends BaseHandler fightAll = new ConcurrentHashMap<>(); + private static volatile int fightTime=1; //本轮比赛是否打完 1 第一场 2 第二场 3第三场 0结束 + private static volatile int fightTime_temp=1; //本轮比赛是否打完 1 第一场 2 第二场 3第三场 0结束 + private static volatile int schedule = 1;//1 选拔赛 + public static final int PROCESS_PRE = 1;//准备竞猜 + public static final int PROCESS_BATTLE = 3;//战斗结算 + private static volatile boolean cahnge; //need change rould + private static volatile int endTime; + private static Map gameFightTypeMap = new HashMap<>(); - private static int endTime; - private static Map gameFightTypeMap = new HashMap<>(); static { - gameFightTypeMap.put(0,GameFightType.TOPArenaPersonFight); - gameFightTypeMap.put(1,GameFightType.TOPArenaRobotFight); - gameFightTypeMap.put(2,GameFightType.TOPArena2RobotFight); + gameFightTypeMap.put(0, GameFightType.TOPArenaPersonFight); + gameFightTypeMap.put(1, GameFightType.TOPArenaRobotFight); + gameFightTypeMap.put(2, GameFightType.TOPArena2RobotFight); } public static int getProgress() { return progress; } + public static int getRoundTimes() { return roundTimes; } + public static int getEndTime() { return endTime; } @@ -75,8 +85,15 @@ public class ChampionshipLogic { return schedule; } + public static int getRealTimes() { + return realTimes; + } - public static class MemberInfo{ + public static int getFightTime() { + return fightTime; + } + + public static class MemberInfo { private int uid; private int type; private int score; // 选拔积分 @@ -85,7 +102,7 @@ public class ChampionshipLogic { private FamilyFightInfo fightInfo; - public MemberInfo( int uid, int type) { + public MemberInfo(int uid, int type) { this.uid = uid; this.type = type; } @@ -132,67 +149,107 @@ public class ChampionshipLogic { } - //提前把分数缓存进来 - public static void setScoreForSuccess(int winnerUid,int failerUid){ + public static void setScoreForSuccess(int winnerUid, int failerUid,boolean result) { MemberInfo memberInfo = getJoinMemberInfo(winnerUid); - if(schedule == 2){ - memberInfo.setFinalScore(memberInfo.getFinalScore()+1); + if (schedule == 2 ) { + if(!result){//第二阶段没出结果直接返回 + return; + } +// if(3!=fightTime){ +// return; +// } + memberInfo.setFinalScore(memberInfo.getFinalScore() + 1); MemberInfo failMemberInfo = getJoinMemberInfo(failerUid); - failMemberInfo.setFinalScore(memberInfo.getFinalScore()*-1); - LOGGER.info("the falid={}",failerUid); + failMemberInfo.setFinalScore(memberInfo.getFinalScore() * -1); + LOGGER.info("the falid={}", failerUid); updateJoinMemberInfo(memberInfo); updateJoinMemberInfo(failMemberInfo); return; } - memberInfo.setScore(memberInfo.getScore() + 1); + memberInfo.setScore(memberInfo.getScore() + 1); updateJoinMemberInfo(memberInfo); } - private static MemberInfo getJoinMemberInfo(int joinUid){ - return RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_JOIN,"",Integer.toString(joinUid),MemberInfo.class); + private static MemberInfo getJoinMemberInfo(int joinUid) { + return RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_JOIN, "", Integer.toString(joinUid), MemberInfo.class); } - private static void updateJoinMemberInfo(MemberInfo memberInfo){ - RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_JOIN, "",Integer.toString(memberInfo.getUid()),memberInfo); + private static void updateJoinMemberInfo(MemberInfo memberInfo) { + RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_JOIN, "", Integer.toString(memberInfo.getUid()), memberInfo); } - public static void scoreToRedis(){ + public static void scoreToRedis() { + //获取所有战斗记录 List curArenaRecordIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_CUR_JOIN_IDS, "", 0, -1); List ids = new ArrayList<>(curArenaRecordIds); List arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); - while (!battleIsFinish(arenaRecords)){ - try { - Thread.sleep(1000); - arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); - } catch (InterruptedException e) { - e.printStackTrace(); - } +// while (!battleIsFinish(arenaRecords)) { +// try { +// Thread.sleep(1000); +// arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } + + if(schedule==2&&(ChampionshipLogic.fightTime!=3)){ + return; } - Set> arenaRankInfoForChampion= new HashSet<>(); + + //胜利者积分排名 + HashMap> integerIntegerHashMap = new HashMap<>(); List finalArenaIds = new ArrayList<>(); - arenaRecords.forEach((v)->{ + Map states = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", String.class, Integer.class); + + arenaRecords.forEach((v) -> { + int winnerUid = v.getAttackId(); - if(v.getFightResult() == 0){ - winnerUid = v.getDefUid(); - } - MemberInfo joinMemberInfo = getJoinMemberInfo(winnerUid); - int score =joinMemberInfo.getScore(); + int failerUid = v.getDefUid(); if(schedule==2){ + String key = String.valueOf(v.getAttackId() * 2222 + String.valueOf(v.getDefUid())); + Integer state = states.get(key); + System.out.println("scoe state = " + state); + if (state == 0) { + winnerUid = v.getDefUid(); + failerUid = v.getAttackId(); + } + }else { + if (v.getFightResult() == 0) { + winnerUid = v.getDefUid(); + failerUid = v.getAttackId(); + } + } + + MemberInfo joinMemberInfo = getJoinMemberInfo(winnerUid); + + + int score ; + if (schedule == 2) { + + joinMemberInfo.setFinalScore(joinMemberInfo.getFinalScore() + 1); + MemberInfo failMemberInfo = getJoinMemberInfo(failerUid); + failMemberInfo.setFinalScore(joinMemberInfo.getFinalScore() * -1); + updateJoinMemberInfo(joinMemberInfo); + updateJoinMemberInfo(failMemberInfo); score = joinMemberInfo.getFinalScore(); finalArenaIds.add(v.getId()); + }else { + score = joinMemberInfo.getScore(); + joinMemberInfo.setScore(joinMemberInfo.getScore() + 1); + updateJoinMemberInfo(joinMemberInfo); } - arenaRankInfoForChampion.add(new DefaultTypedTuple(Integer.toString(winnerUid), (double)score)); + integerIntegerHashMap.putIfAbsent(winnerUid,new DefaultTypedTuple(Integer.toString(winnerUid), (double) score)); }); - RedisUtil.getInstence().updateZsetScores(RedisKey.CHAMPION_RANK,"",arenaRankInfoForChampion); - if(schedule == 2){ - RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL_RECODED_IDS,"",finalArenaIds); + RedisUtil.getInstence().updateZsetScores(RedisKey.CHAMPION_RANK, "", new HashSet<>(integerIntegerHashMap.values())); + if (schedule == 2) { + // RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL_RECODED_IDS, "", finalArenaIds); } } - private static boolean battleIsFinish( List arenaRecords){ - for(ArenaRecord arenaRecord : arenaRecords){ - if(arenaRecord.getFightResult() == -2){ + private static boolean battleIsFinish(List arenaRecords) { + for (ArenaRecord arenaRecord : arenaRecords) { + if (arenaRecord.getFightResult() == -2) { return false; } } @@ -206,15 +263,15 @@ public class ChampionshipLogic { */ public static void start() { LOGGER.info("the champion start..."); - Set> arenaRankInfoInRedis = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK,"", 0, -1); + Set> arenaRankInfoInRedis = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK, "", 0, -1); Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); Set joinUids = new HashSet<>(128); - for(ZSetOperations.TypedTuple item : arenaRankInfoInRedis){ + for (ZSetOperations.TypedTuple item : arenaRankInfoInRedis) { String uidStr = item.getValue(); int uid = Integer.parseInt(uidStr); - if(!robotConfigMap.containsKey(uid)){ + // if (!robotConfigMap.containsKey(uid)) { joinUids.add(uid); - } + // } } clearReidsWhenEnd(joinUids); SChampionshipSetting sChampionshipSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting(); @@ -224,22 +281,22 @@ public class ChampionshipLogic { //获取竞技场排行榜 Set> arenaRankInfo = new HashSet<>(championshipPlayer); Set> arenaRankInfoOne = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ARENA_RANK, Integer.toString(curSeason), 0, championshipPlayer); - if(arenaRankInfoOne!=null&&!arenaRankInfoOne.isEmpty()){ + if (arenaRankInfoOne != null && !arenaRankInfoOne.isEmpty()) { arenaRankInfo.addAll(arenaRankInfoOne); } - Set> arenaRankInfoForChampion= new HashSet<>(); //存入排行榜 + Set> arenaRankInfoForChampion = new HashSet<>(); //存入排行榜 List joinMembers = new ArrayList<>(championshipPlayer); //TODO 应该没用 List memberInfos = new ArrayList<>(championshipPlayer); - arenaRankInfo.forEach(item->{ + arenaRankInfo.forEach(item -> { String uidStr = item.getValue(); MemberInfo memberInfo = new MemberInfo(Integer.parseInt(uidStr), 0); joinMembers.add(memberInfo); - ZSetOperations.TypedTuple typedTuple = new DefaultTypedTuple(uidStr,0D); + ZSetOperations.TypedTuple typedTuple = new DefaultTypedTuple(uidStr, 0D); arenaRankInfoForChampion.add(typedTuple); memberInfos.add(memberInfo); }); - if(arenaRankInfo.size() config = STableManager.getConfig(SArenaRobotConfig.class); TreeMap sArenaRobotConfigMap = new TreeMap(new Comparator() { @@ -247,24 +304,24 @@ public class ChampionshipLogic { public int compare(Integer a, Integer b) { int randomOne = (int) (Math.random() * 10); int randomTwo = (int) (Math.random() * 10); - if(randomOne == randomTwo){ - randomOne+=1; + if (randomOne == randomTwo) { + randomOne += 1; } return randomOne - randomTwo; } }); sArenaRobotConfigMap.putAll(config); int end = championshipPlayer - arenaRankInfo.size(); - for(SArenaRobotConfig sArenaRobotConfig : sArenaRobotConfigMap.values()){ - if(end--<=0){ + for (SArenaRobotConfig sArenaRobotConfig : sArenaRobotConfigMap.values()) { + if (end-- <= 0) { break; } MemberInfo memberInfo = new MemberInfo(sArenaRobotConfig.getId(), 1); joinMembers.add(memberInfo); - ZSetOperations.TypedTuple typedTuple = new DefaultTypedTuple(Integer.toString(sArenaRobotConfig.getId()),0D); + ZSetOperations.TypedTuple typedTuple = new DefaultTypedTuple(Integer.toString(sArenaRobotConfig.getId()), 0D); arenaRankInfoForChampion.add(typedTuple); memberInfos.add(memberInfo); - LOGGER.info("the end={},the robotID={},the size={}",end,sArenaRobotConfig.getId(),joinMembers.size()); + LOGGER.info("the end={},the robotID={},the size={}", end, sArenaRobotConfig.getId(), joinMembers.size()); } } @@ -273,85 +330,85 @@ public class ChampionshipLogic { int nums = championshipPlayer / trialsGroup; //分组 - List> memberOfTeamOfGroup = getMemberOfTeamOfGroup(memberInfos, nums,false); + List> memberOfTeamOfGroup = getMemberOfTeamOfGroup(memberInfos, nums, false); String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_JOIN, ""); RedisUtil.getInstence().del(key, RedisUtil.getInstence().getKey(RedisKey.CHAMPION_RANK, "")); //rank - RedisUtil.getInstence().updateZsetScores(RedisKey.CHAMPION_RANK,"",arenaRankInfoForChampion); + RedisUtil.getInstence().updateZsetScores(RedisKey.CHAMPION_RANK, "", arenaRankInfoForChampion); //join - Map memberInfoMap = new HashMap<>(); + Map memberInfoMap = new HashMap<>(); memberInfos.forEach(memberInfo -> { - memberInfoMap.put(Integer.toString(memberInfo.getUid()),memberInfo); + memberInfoMap.put(Integer.toString(memberInfo.getUid()), memberInfo); }); - RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_JOIN,"",memberInfoMap); + RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_JOIN, "", memberInfoMap); //分组信息 - for(int i=0;i config = STableManager.getConfig(SChampionshipReward.class); - Map rewardsMap = new HashMap<>(); - config.forEach((k,v)->{ + Map rewardsMap = new HashMap<>(); + config.forEach((k, v) -> { int minRank = v.getMinRank(); int maxRank = v.getMaxRank(); - while (minRank<=maxRank){ - rewardsMap.put(minRank++,v); + while (minRank <= maxRank) { + rewardsMap.put(minRank++, v); } }); - int rank=1; - Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK,"", 0, -1); + int rank = 1; + Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK, "", 0, -1); Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); - int nowTime = (int)(TimeUtils.now()/1000); + int nowTime = (int) (TimeUtils.now() / 1000); Set joinUids = new HashSet<>(128); - for(ZSetOperations.TypedTuple item : arenaRankInfo){ + for (ZSetOperations.TypedTuple item : arenaRankInfo) { String uidStr = item.getValue(); int uid = Integer.parseInt(uidStr); - if(robotConfigMap.containsKey(uid)){ + if (robotConfigMap.containsKey(uid)) { rank++; continue; } joinUids.add(uid); User user = UserManager.getUser(uid); SChampionshipReward sChampionshipReward = rewardsMap.get(rank); - if(user.getArenaManager().getTopMaxRank()==0 || user.getArenaManager().getTopMaxRank()>rank){ + if (user.getArenaManager().getTopMaxRank() == 0 || user.getArenaManager().getTopMaxRank() > rank) { user.getArenaManager().setTopMaxRank(rank); } rank++; String title = SErrorCodeEerverConfig.getI18NMessage("champion_reward_title"); - String content = SErrorCodeEerverConfig.getI18NMessage("champion_reward_txt",new Object[]{sChampionshipReward.getTitleDesc()}); - MailLogic.getInstance().sendMail(user.getId(),title,content,ItemUtil.getMailReward(sChampionshipReward.getSeasonReward()),nowTime, Global.MAIL_EFFECTIVE_TIME); + String content = SErrorCodeEerverConfig.getI18NMessage("champion_reward_txt", new Object[]{sChampionshipReward.getTitleDesc()}); + MailLogic.getInstance().sendMail(user.getId(), title, content, ItemUtil.getMailReward(sChampionshipReward.getSeasonReward()), nowTime, Global.MAIL_EFFECTIVE_TIME); } MongoUtil.getLjsdMongoTemplate().lastUpdate(); SChampionshipSetting sChampionshipSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting(); - int arenaItemId =sChampionshipSetting.getArenaItem()[0]; - int rewardItemId =sChampionshipSetting.getArenaItem()[1]; + int arenaItemId = sChampionshipSetting.getArenaItem()[0]; + int rewardItemId = sChampionshipSetting.getArenaItem()[1]; Map sendIds = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_GUESSS_UIDS, "", Integer.class, Integer.class); - for(Integer sendId : sendIds.keySet()){ + for (Integer sendId : sendIds.keySet()) { User user = UserManager.getUser(sendId); Item item = user.getItemManager().getItem(arenaItemId); - int itemNum=0; - if(item!=null){ + int itemNum = 0; + if (item != null) { itemNum = item.getItemNum(); } - if(item!=null && itemNum>0){ + if (item != null && itemNum > 0) { int[][] costs = new int[1][]; costs[0] = new int[2]; - costs[0][0] =arenaItemId; - costs[0][1] =itemNum; - ItemUtil.itemCost(user,costs,BIReason.CHAMPIONM_EXCHANGE_CONSUME,0); - Map itemReward = new HashMap<>(1); - itemReward.put(rewardItemId,itemNum/sChampionshipSetting.getExchangeItem()); - ItemUtil.addItem(user,itemReward,null,BIReason.CHAMPIONM_EXCHANGE_REWARD); + costs[0][0] = arenaItemId; + costs[0][1] = itemNum; + ItemUtil.itemCost(user, costs, BIReason.CHAMPIONM_EXCHANGE_CONSUME, 0); + Map itemReward = new HashMap<>(1); + itemReward.put(rewardItemId, itemNum / sChampionshipSetting.getExchangeItem()); + ItemUtil.addItem(user, itemReward, null, BIReason.CHAMPIONM_EXCHANGE_REWARD); } - LOGGER.info("the uid={},send rewardnum={}",itemNum/sChampionshipSetting.getExchangeItem()); + LOGGER.info("the uid={},send rewardnum={}", itemNum / sChampionshipSetting.getExchangeItem()); } MongoUtil.getLjsdMongoTemplate().lastUpdate(); @@ -396,25 +453,26 @@ public class ChampionshipLogic { /** * 获取分组情况 + * * @param memberInfoList 将要被分配的成员信息 - * @param groupNums 分成几组 + * @param groupNums 分成几组 * @return */ - private static List> getMemberOfTeamOfGroup(List memberInfoList,int groupNums,boolean teamUpdate){ + private static List> getMemberOfTeamOfGroup(List memberInfoList, int groupNums, boolean teamUpdate) { Collections.shuffle(memberInfoList); - int index=0; + int index = 0; List> memberOfTeamTmp = new ArrayList<>(); int temp = groupNums; - while (temp-->0){ + while (temp-- > 0) { memberOfTeamTmp.add(new ArrayList<>()); } - for(MemberInfo memberInfo : memberInfoList){ + for (MemberInfo memberInfo : memberInfoList) { int teamId = (index++ % groupNums); memberOfTeamTmp.get(teamId).add(memberInfo.getUid()); - if(teamUpdate){ - memberInfo.setTeamId(teamId*100+memberInfo.getTeamId()); - }else{ + if (teamUpdate) { + memberInfo.setTeamId(teamId * 100 + memberInfo.getTeamId()); + } else { memberInfo.setTeamId(teamId); } } @@ -422,56 +480,17 @@ public class ChampionshipLogic { } - - - public static void getChampionBetInfo(ISession session,int type) throws Exception { - int uid = session.getUid(); - if(progress==-1){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - String selectIdForRedis = getSelectIdForRedis(); - ArenaInfoProto.ChampionGetBetResponse.Builder builder = ArenaInfoProto.ChampionGetBetResponse.newBuilder(); - if(!StringUtil.isEmpty(selectIdForRedis)){ - builder.setChampionBetInfo(getBetOdds()); - ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", selectIdForRedis, ArenaRecord.class); - if(type == 0){ - int fightResult=arenaRecord.getFightResult(); - if(arenaRecord.getRoundTims() == roundTimes && progress%10%4 != 3){ - fightResult =-1; - } - if(fightResult == -2){ - fightResult=-1; - } - int myGuessID = 0; - String guessUidStr = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_BET_MINE, Integer.toString(uid), selectIdForRedis, String.class); - if(!StringUtil.isEmpty(guessUidStr)) { - myGuessID = Integer.parseInt(guessUidStr); - } - CommonProto.ChampionBattleInfo.Builder builder1 = CommonProto.ChampionBattleInfo.newBuilder() - .setMyInfo(getChampionBattleInfo(arenaRecord.getAttackId())) - .setEnemyInfo(getChampionBattleInfo(arenaRecord.getDefUid())) - .setResult(fightResult); - if(fightResult!=-1){ - builder1.setFightData( CommonProto.FightData.parseFrom(arenaRecord.getFightData())); - } - builder.setChampionBattleInfo(builder1 - .build()); - builder.setWinUid(myGuessID); - } - } - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_BET_INFO_RESPONSE_VALUE,builder.build(),true); - } - public static CommonProto.TeamOneInfo.Builder getChampionBattleInfo(int uid) throws Exception { SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(uid); - if(sArenaRobotConfig!=null){ - return PlayerLogic.getInstance().getRobotTeamInfo(sArenaRobotConfig); + if (sArenaRobotConfig != null) { + return PlayerLogic.getInstance().getRobotTeamInfo(sArenaRobotConfig); } MemberInfo memberInfo = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_JOIN, "", Integer.toString(uid), MemberInfo.class); FamilyFightInfo fightInfo = memberInfo.getFightInfo(); - if(fightInfo == null || progress%10%4 == 0){ + if(fightInfo == null){ return PlayerLogic.getInstance().getUserTeamOneInfo(uid,GlobalsDef.TEAM_ARENA_DEFENSE); } + //fix 整个过程都不能调整编队 User user = UserManager.getUser(uid); PlayerManager playerManager = user.getPlayerInfoManager(); @@ -482,17 +501,19 @@ public class ChampionshipLogic { .setName(playerManager.getNickName()).setUid(uid); CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder(); teamInfo.setTotalForce(fightInfo.getForce()); - if(!fightInfo.getPokenmonIds().isEmpty()){ + if (!fightInfo.getPokenmonIds().isEmpty()) { teamInfo.addAllPokemonInfos(fightInfo.getPokenmonIds()); } - for(Map.Entry entry:fightInfo.getHeroAttribute().entrySet()){ +// int i = 1; + for (Map.Entry entry : fightInfo.getHeroAttribute().entrySet()) { FamilyHeroInfo familyHeroInfo = entry.getValue(); teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder() .setHeroid(entry.getKey()) .setHeroTid(familyHeroInfo.getTempleteId()) .setStar(familyHeroInfo.getStar()) .setLevel(familyHeroInfo.getLevel()) + .setPosition(familyHeroInfo.getPosition()) .build() ); } @@ -501,11 +522,10 @@ public class ChampionshipLogic { } - - private static String getMyCurJoinBattleId(int uid){ + private static String getMyCurJoinBattleId(int uid) { List curArenaRecordList = getCurArenaRecordList(); - for(ArenaRecord arenaRecord :curArenaRecordList){ - if(arenaRecord.getDefUid() == uid || arenaRecord.getAttackId() == uid){ + for (ArenaRecord arenaRecord : curArenaRecordList) { + if (arenaRecord.getDefUid() == uid || arenaRecord.getAttackId() == uid) { return arenaRecord.getId(); } } @@ -514,136 +534,106 @@ public class ChampionshipLogic { /** * 获取我的队伍信息 + * * @param session * @throws ErrorCodeException */ public static void getMyTeamInfo(ISession session) throws Exception { int uid = session.getUid(); MemberInfo memberInfo = getJoinMemberInfo(uid); - if(memberInfo == null){ + if (memberInfo == null) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - List memberIds = getMermberTeam().get(memberInfo.getTeamId()%100); + List memberIds = getMermberTeam().get(memberInfo.getTeamId() % 100); ArenaInfoProto.ChampionGetWorldRankResponse.Builder builder = ArenaInfoProto.ChampionGetWorldRankResponse.newBuilder(); List arenaRankMemberInfo = new ArrayList<>(8); - Map uidRankMap = new HashMap<>(); - Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK,"", 0, -1); - arenaRankInfo.forEach(item->{ + Map uidRankMap = new HashMap<>(); + Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK, "", 0, -1); + arenaRankInfo.forEach(item -> { String value = item.getValue(); int uidTmp = Integer.parseInt(value); - if(memberIds.contains(uidTmp)){ + if (memberIds.contains(uidTmp)) { int score = item.getScore().intValue(); - if(score>=100){ + if (score >= 100) { score = getJoinMemberInfo(uidTmp).getScore(); } - uidRankMap.put(uidTmp,score); + uidRankMap.put(uidTmp, score); } }); //这里将map.entrySet()转换成list - List> list = new ArrayList>(uidRankMap.entrySet()); + List> list = new ArrayList>(uidRankMap.entrySet()); //然后通过比较器来实现排序 - Collections.sort(list, (o1,o2)-> { - if( o2.getValue()==(o1.getValue())){ - return getMaxForce(o2.getValue()) - getMaxForce(o1.getValue()); - } - return o2.getValue().compareTo(o1.getValue()); + Collections.sort(list, (o1, o2) -> { + if (o2.getValue() == (o1.getValue())) { + return getMaxForce(o2.getKey()) - getMaxForce(o1.getKey()); + } + return o2.getValue().compareTo(o1.getValue()); }); - int rank=1; - for(Map.Entry mapping:list){ - CommonProto.ArenaEnemy enemyInfo = getEnemyInfo(mapping.getKey(), rank++, mapping.getValue(),1); - if( uid == mapping.getKey()){ + int rank = 1; + for (Map.Entry mapping : list) { + CommonProto.ArenaEnemy enemyInfo = getEnemyInfo(mapping.getKey(), rank++, mapping.getValue(), 1); + if (uid == mapping.getKey()) { builder.setMyInfo(enemyInfo); } builder.addRankInfos(enemyInfo); } ArenaInfoProto.ChampionGetWorldRankResponse buildResponse = builder.addAllRankInfos(arenaRankMemberInfo).build(); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_GET_RANK_RESPONSE_VALUE,buildResponse,true); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CHAMPION_GET_RANK_RESPONSE_VALUE, buildResponse, true); } - //查看我的战斗记录 - public static void viewAllMyBattleInfo(ISession session) throws Exception { - int uid = session.getUid(); - List myArenaIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid), 0, -1); - ArenaInfoProto.ChanpionGetAllMyBattleHistoryResponse.Builder builder = ArenaInfoProto.ChanpionGetAllMyBattleHistoryResponse.newBuilder(); - if(myArenaIds!=null){ - List ids = new ArrayList<>(myArenaIds); - List myArenaRecordInfos = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); - Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); - for(ArenaRecord arenaRecord : myArenaRecordInfos){ - int attackUid = arenaRecord.getAttackId(); - int enemyId = arenaRecord.getDefUid(); - int fightResult = arenaRecord.getFightResult(); - if(roundTimes == arenaRecord.getRoundTims()){ - if(progress%10%4 != 3 || fightResult==-2){ - fightResult =-1; - } - } - if(fightResult == -2){ - fightResult =-1; - } - int enemyType = robotConfigMap.containsKey(enemyId)?0:1; - int attackType = robotConfigMap.containsKey(attackUid)?0:1; - CommonProto.ArenaEnemy arenaEnemy = ArenaLogic.getInstance().getArenaEnemy(enemyId, enemyType); - CommonProto.ArenaEnemy attackInfo = ArenaLogic.getInstance().getArenaEnemy(attackUid, attackType); - ArenaInfoProto.ChampionTwoEnemInfo build = ArenaInfoProto.ChampionTwoEnemInfo.newBuilder() - .setBlueEnemy(attackInfo) - .setRedEnemy(arenaEnemy) - .setRoundTimes(arenaRecord.getRoundTims()) - .setFightResult(fightResult) - .setId(arenaRecord.getId()) - .build(); - builder.addEnemyPairInfo(build); - } - } - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_GET_MYHISTORY_RESPONSE_VALUE,builder.build(),true); - } - public static void snapPlayFightInfo() throws Exception { - int snapTeamId = GlobalsDef.CHAMPION_ATTACK_TEAM; - RedisUtil.getInstence().del( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FIGHT, "")); + + public static void snapPlayFightInfo( boolean fight) throws Exception { + int snapTeamId = GlobalsDef.CHAMPION_ATTACK_TEAM; + RedisUtil.getInstence().del(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FIGHT, "")); int warTime = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getWarTime(); Map memberInfoMap = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_JOIN, "", Integer.class, MemberInfo.class); - List curArenaRecords= getCurArenaRecordList(); - for(ArenaRecord arenaRecord :curArenaRecords){ + List curArenaRecords = getCurArenaRecordList(); + for (ArenaRecord arenaRecord : curArenaRecords) { int attackId = arenaRecord.getAttackId(); int defUid = arenaRecord.getDefUid(); - snapOneFightInfo(attackId,memberInfoMap); - snapOneFightInfo(defUid,memberInfoMap); + snapOneFightInfo(attackId, memberInfoMap); + snapOneFightInfo(defUid, memberInfoMap); + if(fight){ + long id = FightDispatcher.getFIghtId(); + EndFightProcessor endFightProcessor = new AreFightPro(); + ((AreFightPro) endFightProcessor).setArenaRecord(arenaRecord); + FightDispatcher.getMap().put(id, endFightProcessor); + PVPFightEvent pvpFightEvent = new PVPFightEvent(attackId, snapTeamId, warTime, "", gameFightTypeMap.get(arenaRecord.getType()), defUid, snapTeamId); - long id =FightDispatcher.getFIghtId(); - EndFightProcessor endFightProcessor = new AreFightPro(); - ((AreFightPro) endFightProcessor).setArenaRecord(arenaRecord); - FightDispatcher.getMap().put(id, endFightProcessor) ; - PVPFightEvent pvpFightEvent = new PVPFightEvent(attackId,snapTeamId,warTime,"",gameFightTypeMap.get(arenaRecord.getType()),defUid,snapTeamId); + MemberInfo attackMemberInfo = memberInfoMap.get(attackId); + MemberInfo defMemberInfo = memberInfoMap.get(defUid); + if (defMemberInfo.getType() == 0) { + FamilyFightInfo fightInfo = defMemberInfo.getFightInfo(); + pvpFightEvent.setDefFightSnapData(new DefFightSnapData(fightInfo.getHeroAttribute(), fightInfo.getHeroSkills(), fightInfo.getPokenmonSkills(), fightInfo.getPassiveSkills())); + } + if (attackMemberInfo.getType() == 0) { + FamilyFightInfo fightInfo = attackMemberInfo.getFightInfo(); + pvpFightEvent.setAttackFightSnapData(new DefFightSnapData(fightInfo.getHeroAttribute(), fightInfo.getHeroSkills(), fightInfo.getPokenmonSkills(), fightInfo.getPassiveSkills())); - MemberInfo attackMemberInfo = memberInfoMap.get(attackId); - MemberInfo defMemberInfo = memberInfoMap.get(defUid); - if(defMemberInfo.getType() == 0){ - FamilyFightInfo fightInfo = defMemberInfo.getFightInfo(); - pvpFightEvent.setDefFightSnapData(new DefFightSnapData(fightInfo.getHeroAttribute(),fightInfo.getHeroSkills(),fightInfo.getPokenmonSkills(),fightInfo.getPassiveSkills())); - } - if(attackMemberInfo.getType() == 0){ - FamilyFightInfo fightInfo = attackMemberInfo.getFightInfo(); - pvpFightEvent.setAttackFightSnapData(new DefFightSnapData(fightInfo.getHeroAttribute(),fightInfo.getHeroSkills(),fightInfo.getPokenmonSkills(),fightInfo.getPassiveSkills())); + } + if(arenaRecord.getTurn()==2){ + pvpFightEvent.setRever(true); + } + FightDispatcher.dispatcherAsync(pvpFightEvent, id); } - FightDispatcher.dispatcherAsync(pvpFightEvent,id); } } - public static void snapOneFightInfo(int uid,Map joinMembers) throws Exception { + public static void snapOneFightInfo(int uid, Map joinMembers) throws Exception { int snapTeamId = GlobalsDef.TEAM_ARENA_DEFENSE; Map config = STableManager.getConfig(SArenaRobotConfig.class); - if(config.containsKey(uid)){ + if (config.containsKey(uid)) { return; } MemberInfo memberInfo = joinMembers.get(uid); @@ -652,89 +642,85 @@ public class ChampionshipLogic { //血量处理,buff处理 int force = HeroLogic.getInstance().calTeamTotalForce(user, snapTeamId, false); - Map heroAllAttribute = BloodLogic.getInstance().battleRecord(user,snapTeamId, null); + Map heroAllAttribute = BloodLogic.getInstance().battleRecord(user, snapTeamId, null); fightInfo.setHeroAttribute(heroAllAttribute); fightInfo.setForce(force); List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(snapTeamId); - if(teamPosHeroInfoList==null||teamPosHeroInfoList.size()<1){ + if (teamPosHeroInfoList == null || teamPosHeroInfoList.size() < 1) { teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(1); } Map heroMap = user.getHeroManager().getHeroMap(); - for(TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList){ + for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { String heroId = teamPosHeroInfo.getHeroId(); Hero hero = heroMap.get(heroId); StringBuilder skillSb = new StringBuilder(); - String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero,skillSb ).toString(); - fightInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1)); + String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString(); + fightInfo.updateHeroSkill(heroId, heroSkill.substring(0, heroSkill.length() - 1)); } String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user, snapTeamId); fightInfo.setPokenmonSkills(pokenmonSkills); String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId); fightInfo.setPassiveSkills(pokenmonPassiveSkills); List teamPosForPokenInfos = user.getTeamPosManager().getTeamPosForPoken().get(snapTeamId); - if(teamPosForPokenInfos!=null){ + if (teamPosForPokenInfos != null) { List pokens = new ArrayList<>(); - for(TeamPosForPokenInfo teamPosForPokenInfo : teamPosForPokenInfos){ + for (TeamPosForPokenInfo teamPosForPokenInfo : teamPosForPokenInfos) { pokens.add(teamPosForPokenInfo.getPokenId()); } fightInfo.setPokenmonIds(pokens); } - memberInfo.setFightInfo(fightInfo); - joinMembers.put(memberInfo.getUid(),memberInfo); - RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_JOIN,"",String.valueOf(uid),memberInfo); + joinMembers.put(memberInfo.getUid(), memberInfo); + RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_JOIN, "", String.valueOf(uid), memberInfo); } /** * 筛选出一组用于竞猜比赛队伍信息,并向前端广播 */ - public static void selectBetTeam(){ + public static void selectBetTeam() { int min = Integer.MAX_VALUE; String selectBetId = ""; Map config = STableManager.getConfig(SArenaRobotConfig.class); Map joinMembers = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_JOIN, "", Integer.class, MemberInfo.class); List curArenaRecords = getCurArenaRecordList(); - for(ArenaRecord arenaRecord : curArenaRecords){ + for (ArenaRecord arenaRecord : curArenaRecords) { int attackId = arenaRecord.getAttackId(); int defUid = arenaRecord.getDefUid(); MemberInfo attackMemberInfo = joinMembers.get(attackId); MemberInfo defkMemberInfo = joinMembers.get(defUid); - int attackForce = getForce(attackMemberInfo,config); - int defForce = getForce(defkMemberInfo,config); + int attackForce = getForce(attackMemberInfo, config); + int defForce = getForce(defkMemberInfo, config); int differForce = Math.abs(attackForce - defForce); //选择一组战力悬殊最小的 - if(min>differForce){ + if (min > differForce) { min = differForce; selectBetId = arenaRecord.getId(); } } int guessNum = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getGuessNum(); - ArenaRecord arenaRecord =RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD,"",selectBetId,ArenaRecord.class); + ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", selectBetId, ArenaRecord.class); int attackId = arenaRecord.getAttackId(); int defUid = arenaRecord.getDefUid(); - RedisUtil.getInstence().incrementZsetScore(RedisKey.CHAMPION_BET_ALL,"",selectBetId +":" + attackId,guessNum); - RedisUtil.getInstence().incrementZsetScore(RedisKey.CHAMPION_BET_ALL,"",selectBetId +":" + defUid,guessNum); + RedisUtil.getInstence().incrementZsetScore(RedisKey.CHAMPION_BET_ALL, "", selectBetId + ":" + attackId, guessNum); + RedisUtil.getInstence().incrementZsetScore(RedisKey.CHAMPION_BET_ALL, "", selectBetId + ":" + defUid, guessNum); String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_BETID, ""); - RedisUtil.getInstence().set(key,selectBetId); + RedisUtil.getInstence().set(key, selectBetId); } - public static int getForce( MemberInfo memberInfo, Map config){ + public static int getForce(MemberInfo memberInfo, Map config) { int force = 0; SArenaRobotConfig sArenaRobotConfig = config.get(memberInfo.getUid()); - if(sArenaRobotConfig!=null){ + if (sArenaRobotConfig != null) { force = sArenaRobotConfig.getTotalForce(); - }else{ + } else { force = memberInfo.getFightInfo().getForce(); } return force; } - - - // public static void guess(ISession session, int winUid,int chip) throws Exception { // // @@ -744,45 +730,52 @@ public class ChampionshipLogic { /** * 回收资源 */ - public static void clearReidsWhenEnd( Set joinUids){ - List delKeys = new ArrayList<>(); - String betAllKey = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_ALL, ""); - Set betDetails = RedisUtil.getInstence().getZset(betAllKey, 0, -1); - for(String betInfo : betDetails){ - Map userDeatails = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_BET_DETAIL, betInfo, Integer.class, Integer.class); - userDeatails.keySet().forEach(uid->{ - delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_MINE,Integer.toString(uid))); - }); - delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_DETAIL, betInfo)); - } - delKeys.add(betAllKey); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_ARENA_RECORD, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CHOSE_TEAM_INFO, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_JOIN_IDS, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_JOIN, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_BETID, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL32_JOIN_IDS, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL4_JOIN_IDS, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL_TEAM_INFO, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_RANK, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL_RECODED_IDS, "")); - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_GUESSS_UIDS, "")); + public static void clearReidsWhenEnd(Set joinUids) { + List delKeys = new ArrayList<>(); + String betAllKey = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_ALL, ""); + Set betDetails = RedisUtil.getInstence().getZset(betAllKey, 0, -1); + for (String betInfo : betDetails) { + Map userDeatails = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_BET_DETAIL, betInfo, Integer.class, Integer.class); + userDeatails.keySet().forEach(uid -> { + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_MINE, Integer.toString(uid))); + }); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_BET_DETAIL, betInfo)); + } + delKeys.add(betAllKey); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_ARENA_RECORD, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CHOSE_TEAM_INFO, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_JOIN_IDS, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_JOIN, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_JOIN_SELECT, "")); - //我的历史结果 - joinUids.forEach(uid->{ - delKeys.add( RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid))); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_BETID, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL32_JOIN_IDS, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL4_JOIN_IDS, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL_TEAM_INFO, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_RANK, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL_RECODED_IDS, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_GUESSS_UIDS, "")); + + //我的历史结果 + joinUids.forEach(uid -> { + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid))); }); RedisUtil.getInstence().del(delKeys.toArray(new String[0])); - - } + realTimes=1; + fightTime=1; + fightAll.clear(); + } /** * 发送竞猜奖 - * + *

* 比赛结束后删除 */ - public static void sendBetReward(){ + public static void sendBetReward() { String selectUid = getSelectIdForRedis(); + if(selectUid.isEmpty()){ + return; + } int[] arenaItem = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getArenaItem(); ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", selectUid, ArenaRecord.class); @@ -790,22 +783,23 @@ public class ChampionshipLogic { int fightResult = arenaRecord.getFightResult(); int winUid = arenaRecord.getAttackId(); // int failUid = arenaRecord.getDefUid(); - if(fightResult == 0){ + if (fightResult == 0) { winUid = arenaRecord.getDefUid(); // failUid = arenaRecord.getAttackId(); } // Double winCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", selectUid + ":" +winUid); // Double failCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", selectUid + ":" + failUid); - double winRate = 1.5; + double winRate = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getGuessRatio() / 10000d; Map betPersonInfoMap = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_BET_DETAIL, selectUid + ":" + winUid, Integer.class, Integer.class); - betPersonInfoMap.forEach((betUid,coins)->{ + betPersonInfoMap.forEach((betUid, coins) -> { try { User user = UserManager.getUser(betUid); AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AyncWorkerRunnable() { @Override public void work(User user) throws Exception { int mineWinCoins = (int) (winRate * coins); + System.out.println("coins winRate = " + coins+":"+winRate+":mineWinCoins" +mineWinCoins); int[][] drop = new int[1][]; drop[0] = new int[2]; drop[0][0] = arenaItem[0]; @@ -813,9 +807,9 @@ public class ChampionshipLogic { ItemUtil.drop(user, drop, BIReason.CHAMPIION_BET_WIN_REWARD); MongoUtil.getLjsdMongoTemplate().lastUpdate(); ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); - if(sessionByUid!=null){ + if (sessionByUid != null) { ArenaInfoProto.ChampionGuessSuccessIndication build = ArenaInfoProto.ChampionGuessSuccessIndication.newBuilder().setItemId(arenaItem[0]).setItemNum(mineWinCoins).setRoundTimes(roundTimes).build(); - MessageUtil.sendIndicationMessage(sessionByUid,1, MessageTypeProto.MessageType.CHAMPION_GUESS_SUCCESS_INDICATION_VALUE,build,true); + MessageUtil.sendIndicationMessage(sessionByUid, 1, MessageTypeProto.MessageType.CHAMPION_GUESS_SUCCESS_INDICATION_VALUE, build, true); } } @@ -826,81 +820,13 @@ public class ChampionshipLogic { } }); - } - - - /** - * 查看竞猜历史记录 - * - * @param session - */ - public static void viewMGuessHistory(ISession session) throws Exception { - int uid = session.getUid(); - Map betHistorys = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_BET_MINE, Integer.toString(uid), String.class, String.class); - ArenaInfoProto.ChampionGetAllMyBetInfoResponse.Builder builder = ArenaInfoProto.ChampionGetAllMyBetInfoResponse.newBuilder(); - if(!betHistorys.isEmpty()){ - List ids = new ArrayList<>(betHistorys.keySet()); - List arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); - Map arenaRobotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); - for(ArenaRecord arenaRecord: arenaRecords){ - int attactkUidType = arenaRobotConfigMap.containsKey(arenaRecord.getAttackId())?0:1; - int defUidType = arenaRobotConfigMap.containsKey(arenaRecord.getDefUid())?0:1; - CommonProto.ArenaEnemy attackEnemy = ArenaLogic.getInstance().getArenaEnemy(arenaRecord.getAttackId(), attactkUidType); - CommonProto.ArenaEnemy defEnemy = ArenaLogic.getInstance().getArenaEnemy(arenaRecord.getDefUid(), defUidType); - int fightResult = arenaRecord.getFightResult(); - int guessState = 3; - if(arenaRecord.getRoundTims()==roundTimes){ - if(progress%10%4!=3){ - fightResult=-1; - } - if(progress%10%4 == 0){ - guessState=0; - } - if(progress%10%4 == 1 || progress%10%4 == 2){ - guessState=1; - } - } - if(fightResult == -2){ - fightResult =-1; - } - ArenaInfoProto.ChampionMyBetDetail.Builder betDetailBuilder = ArenaInfoProto.ChampionMyBetDetail.newBuilder(); - String guessUid = betHistorys.get(arenaRecord.getId()); - Integer mineBetCoins = RedisUtil.getInstence().getMapEntry(RedisKey.CHAMPION_BET_DETAIL, arenaRecord.getId() + ":" + guessUid, Integer.toString(uid), Integer.class); - int myWinCoins =0; - if(fightResult>=0){ - int winner = arenaRecord.getAttackId(); - int loseer = arenaRecord .getDefUid(); - if(fightResult == 0){ - winner = arenaRecord.getDefUid(); - loseer = arenaRecord.getAttackId(); - } - - if(!StringUtil.isEmpty(guessUid) && Integer.parseInt(guessUid)== winner){ - guessState = 2; - Double winnerCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", arenaRecord.getId() + ":" + winner); - Double loseCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", arenaRecord.getId() + ":" + loseer); - myWinCoins = (int)((winnerCoins+loseCoins)/winnerCoins*mineBetCoins); - } - } - - builder.addChampionMyBetDetails(betDetailBuilder.setBetResult(guessState) - .setEnemyPairInfo(ArenaInfoProto.ChampionTwoEnemInfo.newBuilder().setRedEnemy(defEnemy).setBlueEnemy(attackEnemy).setFightResult(fightResult).setId(arenaRecord.getId()).setRoundTimes(arenaRecord.getRoundTims())) - .setMyBetCoins(mineBetCoins) - .setMyWinCoins(myWinCoins) - - ); - } - } - - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_GET_MYALL_BET_RESPONSE_VALUE,builder.build(),true); - - } - public static CommonProto.ChampionBetInfo getBetOdds(){ + + public static CommonProto.ChampionBetInfo getBetOdds() { String selectUid = getSelectIdForRedis(); - ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD,"",selectUid,ArenaRecord.class); + ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", selectUid, ArenaRecord.class); Double attackCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", selectUid + ":" + arenaRecord.getAttackId()); Double defCoins = RedisUtil.getInstence().getZSetScore(RedisKey.CHAMPION_BET_ALL, "", selectUid + ":" + arenaRecord.getDefUid()); return CommonProto.ChampionBetInfo.newBuilder().setBlueCoins(attackCoins.intValue()).setRedCoins(defCoins.intValue()).setId(selectUid).build(); @@ -908,136 +834,144 @@ public class ChampionshipLogic { } //todo - public static Map> getMermberTeam(){ + public static Map> getMermberTeam() { Type type = new TypeToken>() { }.getType(); - return RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_CHOSE_TEAM_INFO,"",Integer.class,type); + return RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_CHOSE_TEAM_INFO, "", Integer.class, type); } - /** * 1.选出参战人员 人永远是进攻方 */ - public static void selectToBattle(){ - RedisUtil.getInstence().del(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_JOIN_IDS,"")); - Map arenaRecordMap = new HashMap<>(); + public static void selectToBattle() { + RedisUtil.getInstence().del(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_JOIN_IDS, "")); + Map arenaRecordMap = new HashMap<>(); List arenaRecordIds = new ArrayList<>(); - if(schedule == 1){ + if (schedule == 1) { List joinIndexs = STableManager.getFigureConfig(CommonStaticConfig.class).getMatrixforGroupInfo().get(roundTimes); Map joinMembers = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_JOIN, "", Integer.class, MemberInfo.class); - if(joinIndexs != null){ - Map> memberOfTeam =getMermberTeam(); - for(int[] joinIndex : joinIndexs){ - int joinIndexRed = joinIndex[0]-1; - int joinIndexBlue = joinIndex[1]-1; - for(List memberOfOneTeam : memberOfTeam.values()){ - MemberInfo memberInfoAttack =joinMembers.get(memberOfOneTeam.get(joinIndexRed)); - MemberInfo memberInfoDef =joinMembers.get(memberOfOneTeam.get(joinIndexBlue)); + if (joinIndexs != null) { + Map> memberOfTeam = getMermberTeam(); + for (int[] joinIndex : joinIndexs) { + int joinIndexRed = joinIndex[0] - 1; + int joinIndexBlue = joinIndex[1] - 1; + for (List memberOfOneTeam : memberOfTeam.values()) { + MemberInfo memberInfoAttack = joinMembers.get(memberOfOneTeam.get(joinIndexRed)); + MemberInfo memberInfoDef = joinMembers.get(memberOfOneTeam.get(joinIndexBlue)); int attackUid = memberInfoAttack.getUid(); int defUid = memberInfoDef.getUid(); - if(memberInfoAttack.getType() == 1){ + if (memberInfoAttack.getType() == 1) { attackUid = memberInfoDef.getUid(); defUid = memberInfoAttack.getUid(); } int type = memberInfoAttack.getType() + memberInfoDef.getType(); ArenaRecord arenaRecord = new ArenaRecord(); - arenaRecord.setId(KeyGenUtils.produceIdByModule(UUIDEnum.ARENARECORD,memberInfoAttack.getUid())); + arenaRecord.setId(KeyGenUtils.produceIdByModule(UUIDEnum.ARENARECORD, memberInfoAttack.getUid())); arenaRecord.setAttackId(attackUid); arenaRecord.setDefUid(defUid); arenaRecord.setType(type); arenaRecord.setRoundTims(roundTimes); - arenaRecordMap.put(arenaRecord.getId(),arenaRecord); + arenaRecordMap.put(arenaRecord.getId(), arenaRecord); } } } - }else{ //决赛 + } else { //决赛 Type valueType = new TypeToken>() { }.getType(); Map> finalmemberOfTeam = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_FINAL_TEAM_INFO, "", Integer.class, valueType); Map allJoinMembers = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_JOIN, "", Integer.class, MemberInfo.class); + List possibleJoin = new ArrayList<>(); - for(List memberOfOneTeam : finalmemberOfTeam.values()){ + for (List memberOfOneTeam : finalmemberOfTeam.values()) { memberOfOneTeam.forEach(id -> { MemberInfo memberInfo = allJoinMembers.get(id); - if(memberInfo.getFinalScore()>0){ + if (memberInfo.getFinalScore() > 0) { possibleJoin.add(memberInfo); } }); } - Map memberPerOfTeam = new HashMap<>(); - finalmemberOfTeam.forEach((k,v)->{ - v.forEach(memberId->{ - memberPerOfTeam.put(memberId,k); + System.out.println("vvvvvvvvvvvvvvpossibleJoin = " + possibleJoin.size()); + Map memberPerOfTeam = new HashMap<>(); + finalmemberOfTeam.forEach((k, v) -> { + v.forEach(memberId -> { + memberPerOfTeam.put(memberId, k); }); }); int times = 0; int length = possibleJoin.size(); - if(length<8){ - length=8; + if (length < 8) { + length = 8; } length = length / 8; - for(int i=0;i10){ - arenaRecord.setNums(times++); - }else{ - arenaRecord.setNums(times++%length); + for (int i = 0; i < possibleJoin.size(); i = i + 2) { + try { + MemberInfo memberInfoAttack = possibleJoin.get(i); + MemberInfo memberInfoDef = possibleJoin.get(i + 1); + int attackUid = memberInfoAttack.getUid(); + int defUid = memberInfoDef.getUid(); + int type = memberInfoAttack.getType() + memberInfoDef.getType(); + ArenaRecord arenaRecord = new ArenaRecord(); + arenaRecord.setId(KeyGenUtils.produceIdByModule(UUIDEnum.ARENARECORD, memberInfoAttack.getUid())); + arenaRecord.setAttackId(attackUid); + arenaRecord.setDefUid(defUid); + arenaRecord.setType(type); + arenaRecord.setRoundTims(realTimes+7); + arenaRecord.setTurn(fightTime); + if (realTimes > 2) { + arenaRecord.setNums(times++); + } else { + arenaRecord.setNums(times++ % length); + } + LOGGER.info("sseccccccccccccccccccccthe attackId={},the defid={},the rountTImes={},the team={},the position={}", attackUid, defUid, roundTimes, memberPerOfTeam.get(attackUid), arenaRecord.getNums()); + arenaRecordMap.put(arenaRecord.getId(), arenaRecord); + }catch (Exception e){ + e.printStackTrace(); } - LOGGER.info("the attackId={},the defid={},the rountTImes={},the team={},the position={}",attackUid,defUid,roundTimes,memberPerOfTeam.get(attackUid),arenaRecord.getNums()); - arenaRecordMap.put(arenaRecord.getId(),arenaRecord); + } } - RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_ARENA_RECORD,"",arenaRecordMap); + + RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", arenaRecordMap); arenaRecordIds.addAll(arenaRecordMap.keySet()); - RedisUtil.getInstence().lSet(RedisKey.CHAMPION_CUR_JOIN_IDS,"",arenaRecordIds); - if(schedule == 2){ - if(arenaRecordIds.size()>=4){ - RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL32_JOIN_IDS,"",arenaRecordIds); - LOGGER.info("the rountTimes={},the size={}",roundTimes,arenaRecordIds.size()); - }else{ - RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL4_JOIN_IDS,"",arenaRecordIds); + RedisUtil.getInstence().lSet(RedisKey.CHAMPION_CUR_JOIN_IDS, "", arenaRecordIds); + if (schedule == 2) { + if (arenaRecordIds.size() >= 4) { + RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL32_JOIN_IDS, "", arenaRecordIds); + LOGGER.info("the rountTimes={},the size={}", roundTimes, arenaRecordIds.size()); + } else { + RedisUtil.getInstence().lSet(RedisKey.CHAMPION_FINAL4_JOIN_IDS, "", arenaRecordIds); } } - Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); - arenaRecordMap.forEach((id,arenaRecord)->{ + + arenaRecordMap.forEach((id, arenaRecord) -> { int defUid = arenaRecord.getDefUid(); int attackId = arenaRecord.getAttackId(); - if(!robotConfigMap.containsKey(defUid)){ + // if (!robotConfigMap.containsKey(defUid)) { String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(defUid)); - RedisUtil.getInstence().lSet(key,id); - } - if(!robotConfigMap.containsKey(attackId)){ - String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(attackId)); - RedisUtil.getInstence().lSet(key,id); + RedisUtil.getInstence().lSet(key, id); + // } + // if (!robotConfigMap.containsKey(attackId)) { + String key2 = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(attackId)); + RedisUtil.getInstence().lSet(key2, id); - } + // } }); } - public static List getCurArenaRecordList(){ + public static List getCurArenaRecordList() { List curArenaRecordIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_CUR_JOIN_IDS, "", 0, -1); List ids = new ArrayList<>(curArenaRecordIds); return RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); } - public static String getSelectIdForRedis(){ + public static String getSelectIdForRedis() { String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_CUR_BETID, ""); Object result = RedisUtil.getInstence().get(key); - if(result!=null){ + if (result != null) { return result.toString(); } return ""; @@ -1046,55 +980,54 @@ public class ChampionshipLogic { private static int getMaxForce(int uid) { SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(uid); - if(sArenaRobotConfig!=null){ + if (sArenaRobotConfig != null) { return sArenaRobotConfig.getTotalForce(); } try { return UserManager.getUser(uid).getPlayerInfoManager().getMaxForce(); } catch (Exception e) { - LOGGER.error("",e); + LOGGER.error("", e); return 0; } } /** * 选出每组前n名参与决赛人,重置他们分数为100分,进行同台竞技 - * */ - public static void selectToJoinFinal(){ + public static void selectToJoinFinal() { int knockoutGroup = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getKnockoutGroup(); int trialsGroupWinner = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getTrialsGroupWinner(); Map> mermberTeam = getMermberTeam(); - List canJoinFinal = new ArrayList<>(trialsGroupWinner*mermberTeam.size()); - Set> arenaRankInfoForChampion= new HashSet<>(); + List canJoinFinal = new ArrayList<>(trialsGroupWinner * mermberTeam.size()); + Set> arenaRankInfoForChampion = new HashSet<>(); Map joinMembers = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_JOIN, "", Integer.class, MemberInfo.class); - for(List memberOfOneTeam : mermberTeam.values()){ + for (List memberOfOneTeam : mermberTeam.values()) { Collections.sort(memberOfOneTeam, new Comparator() { @Override public int compare(Integer o1, Integer o2) { - if( joinMembers.get(o2).getScore() == joinMembers.get(o1).getScore()){ + if (joinMembers.get(o2).getScore() == joinMembers.get(o1).getScore()) { return getMaxForce(o2) - getMaxForce(o1); } - return joinMembers.get(o2).getScore() -joinMembers.get(o1).getScore(); + return joinMembers.get(o2).getScore() - joinMembers.get(o1).getScore(); } }); - for(int i=0;i> finalmemberOfTeam = getMemberOfTeamOfGroup(canJoinFinal,knockoutGroup,true); - for(int i=0;i> finalmemberOfTeam = getMemberOfTeamOfGroup(canJoinFinal, knockoutGroup, true); + for (int i = 0; i < finalmemberOfTeam.size(); i++) { + RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_FINAL_TEAM_INFO, "", Integer.toString(i), finalmemberOfTeam.get(i)); } - Map finalMemberInfoMap = new HashMap<>(); + Map finalMemberInfoMap = new HashMap<>(); canJoinFinal.forEach(memberInfo -> { - finalMemberInfoMap.put(Integer.toString(memberInfo.getUid()),memberInfo); + finalMemberInfoMap.put(Integer.toString(memberInfo.getUid()), memberInfo); }); - RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_JOIN, "",finalMemberInfoMap); + RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_JOIN, "", finalMemberInfoMap); } @@ -1104,104 +1037,61 @@ public class ChampionshipLogic { * 2.做玩家战斗数据快照。 * 3.筛选出竞猜队伍。 * 4开启定时广播操作。 + * * @throws Exception */ public static void switchBet(int functionId) throws Exception { int[][] itemNum = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getItemNum(); SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(functionId); - Map sendIds = new HashMap<>(); - snapPlayFightInfo(); - OnlineUserManager.sessionMap.values().forEach(session->{ - try { - sendIds.put(Integer.toString(session.getUid()),1); - User user = UserManager.getUser(session.getUid()); - AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AyncWorkerRunnable() { - @Override - public void work(User user) throws Exception { - if(!HandlerLogicThread.checkOpen(user, sGlobalSystemConfig)){ - return; - } - Item item = user.getItemManager().getItem(itemNum[0][0]); + Map sendIds = new HashMap<>(); - if (item == null||item.getItemNum() arenaRankMemberInfo = new ArrayList<>(20); + OnlineUserManager.sessionMap.values().forEach(session -> { + try { + sendIds.put(Integer.toString(session.getUid()), 1); + User user = UserManager.getUser(session.getUid()); + AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AyncWorkerRunnable() { + @Override + public void work(User user) throws Exception { + if (!HandlerLogicThread.checkOpen(user, sGlobalSystemConfig)) { + return; + } + Item item = user.getItemManager().getItem(itemNum[0][0]); - int rankEndLine = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getChampionshipPlayer(); - int myUid = session.getUid(); - CommonProto.ArenaEnemy myInfo = null; - ArenaInfoProto.ChampionGetWorldRankResponse.Builder builder = ArenaInfoProto.ChampionGetWorldRankResponse.newBuilder(); - if(start<=rankEndLine) { - Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CHAMPION_RANK,"", start, end); - for (ZSetOperations.TypedTuple item : arenaRankInfo) { - String value = item.getValue(); - int uid = Integer.parseInt(value); - start++; - CommonProto.ArenaEnemy enemyInfo = getEnemyInfo(uid, start,0,0); - if(enemyInfo == null){ - start--; - continue; - } - arenaRankMemberInfo.add(enemyInfo); - if(uid == myUid){ - myInfo = enemyInfo; - } - } - } - if(myInfo==null && start<=rankEndLine){ - int myRank= RedisUtil.getInstence().getZSetreverseRank(RedisKey.CHAMPION_RANK,"",Integer.toString(myUid)).intValue(); - if(myRank != -1){ - myInfo=getEnemyInfo(myUid, myRank,0,0); - } - } - if(myInfo!=null){ - builder.setMyInfo(myInfo); - } + if (item == null || item.getItemNum() < itemNum[0][1]) { + int[][] reward = new int[1][]; + int[] temp2 = new int[2]; + temp2[0] = itemNum[0][0]; + temp2[1] = item == null ? itemNum[0][1] : itemNum[0][1] - item.getItemNum(); + reward[0] = temp2; + // fix 发放代币 只补充到阈值 + ItemUtil.drop(user, reward, BIReason.CHAMPIION_BET_REWARD); + MongoUtil.getLjsdMongoTemplate().lastUpdate(); + } + + } + }); + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); + } catch (Exception e) { + e.printStackTrace(); + } + }); + RedisUtil.getInstence().putMapEntrys(RedisKey.CHAMPION_GUESSS_UIDS, "", sendIds); + selectBetTeam(); - ArenaInfoProto.ChampionGetWorldRankResponse buildResponse = builder.addAllRankInfos(arenaRankMemberInfo).build(); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_GET_RANK_RESPONSE_VALUE,buildResponse,true); } - private static CommonProto.ArenaEnemy getEnemyInfo(int uid,int start,int score,int type) throws Exception { + + public static CommonProto.ArenaEnemy getEnemyInfo(int uid, int start, int score, int type) throws Exception { Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); CommonProto.ArenaEnemy.Builder builder = CommonProto.ArenaEnemy.newBuilder(); - if(robotConfigMap.containsKey(uid)){ + if (robotConfigMap.containsKey(uid)) { SArenaRobotConfig sArenaRobotConfig = robotConfigMap.get(uid); - if(type == 0){ + if (type == 0) { CommonProto.Team teamBuild = CommonProto.Team.newBuilder().addAllHeroTid(sArenaRobotConfig.getHeroList()).build(); builder.setTeam(teamBuild); } @@ -1216,16 +1106,16 @@ public class ChampionshipLogic { .setHeadFrame(0) .setScore(score) .build(); - return builder.setPersonInfo(personInfoBuild).build(); + return builder.setPersonInfo(personInfoBuild).build(); } - User user = UserManager.getUser(uid,true); + User user = UserManager.getUser(uid, true); if (null == user) { return null; } int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.TEAM_ARENA_DEFENSE, false); - if(type == 0){ + if (type == 0) { List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.TEAM_ARENA_DEFENSE); Map heroMap = user.getHeroManager().getHeroMap(); List heroTids = new ArrayList<>(teamPosHeroInfoList.size()); @@ -1253,68 +1143,86 @@ public class ChampionshipLogic { public static void minuteCheck(boolean isServerStart) throws Exception { TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.TopBattle); - if( null == timeControllerOfFunction){ + if (null == timeControllerOfFunction) { progress = -1; return; } long now = TimeUtils.now(); long startTime = timeControllerOfFunction.getStartTime(); SChampionshipSetting sChampionshipSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting(); - int duration = sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime() + sChampionshipSetting.getSettleTime(); - int progressState=getProgress((int)((now - startTime)/1000%duration +1)); - long round = (now - startTime) /1000/ duration + 1; + int duration = sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime(); //fix 只有竞猜和战斗 + int progressState = getProgress((int) ((now - startTime) / 1000 % duration + 1)); //阶段 + long round = (now - startTime) / 1000 / duration + 1;//轮数 roundTimes = (int) round; long diff = round - (sChampionshipSetting.getTrialsGroup() - 1); int progressTmp; - if(diff<=0){ //选拔赛 + if (diff <= 0) { //选拔赛 // //竞猜阶段取消,改成直接战斗 fix 又改回来了 // progressState = progressState==1?2:progressState; - progressTmp =100 + roundTimes*10 + progressState; - schedule=1; - }else {//决赛 - int totalWiner =sChampionshipSetting.getChampionshipPlayer()/ sChampionshipSetting.getTrialsGroup() * sChampionshipSetting.getTrialsGroupWinner(); - if(diff>totalWiner || Math.pow(2,diff)>totalWiner){ - schedule=2; - if(progress!=-2){ - progress= -2; - sendAllProgressUpdate(); - } - progress= -2; - return; - } + progressTmp = 100 + roundTimes * 10 + progressState; + schedule = 1; + fightTime=2; + if (progressTmp == progress) { + return; + } + } else {//决赛 - progressTmp = 200 + (int)(diff)*10 + progressState; - if(schedule==1){ // 刚开始进入决赛,选拔出选手 + if (realTimes>5) { + schedule = 2; + if (progress != -2) { + progress = -2; + sendAllProgressUpdate(); + } + progress = -2; + return; + } + + if (schedule == 1) { // 刚开始进入决赛,选拔出选手 + realTimes=1; + fightTime=0; + schedule = 2; selectToJoinFinal(); } - schedule=2; - } - if(progressTmp == progress){ - return; + progressTmp = 200 + (realTimes) * 10 + progressState; + if (progressTmp == progress) { + return; + } } - //todo - // if(schedule ==1) { - endTime = (int)( startTime/1000 + (round-1)*duration + getDuratimeByProgressState(progressState)); -// }else{ -// endTime = (int)( startTime/1000 + (sChampionshipSetting.getTrialsGroup()-1)*durationSelect + (round-sChampionshipSetting.getTrialsGroup())*durationFinal + getDuratimeByProgressState(progressState)); -// } - progress = progressTmp; - if(isServerStart){ + // if(schedule ==1) { + endTime = (int) (startTime / 1000 + (round - 1) * duration + getDuratimeByProgressState(progressState)); + if (isServerStart) { return; } - if(progress%10%4==0){ - ThreadManager.getScheduledExecutor().execute(new Runnable() { - @Override - public void run() { - selectToBattle(); + if (progressState == 1) { //竞猜阶段 后台自动运行战斗 + + if(schedule == 2 ){ + if(fightTime==2&&fightTime_temp==3){ + fightTime=3; + scoreToRedis(); + realTimes++; + fightTime=0; + return; } - }); - } - if(progress%10%4==1){ //竞猜阶段 后台自动运行战斗 + if(fightTime==3){ + scoreToRedis(); + realTimes++; + fightTime=0; + return; + } + } + progress = progressTmp; + scoreToRedis(); + if(fightTime==0){ +// String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_ARENA_RECORD_THREE, ""); +// RedisUtil.getInstence().del(key, RedisUtil.getInstence().getKey(RedisKey.CHAMPION_ARENA_RECORD_THREE, "")); + } + fightTime++; + //准备阶段 + selectToBattle(); ThreadManager.getScheduledExecutor().execute(new Runnable() { @Override public void run() { @@ -1325,59 +1233,116 @@ public class ChampionshipLogic { } } }); + sendAllProgressUpdate(); - }else if(progress%10%4==3){ //结算阶段 + } else if (progressState == 3) { //结算阶段 + progress = progressTmp; //等待玩家数据分数入redis ThreadManager.getScheduledExecutor().execute(new Runnable() { @Override public void run() { try { - scoreToRedis(); - sendBetReward(); + + snapPlayFightInfo(true); + + List curArenaRecordIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_CUR_JOIN_IDS, "", 0, -1); + List ids = new ArrayList<>(curArenaRecordIds); + List arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); + + while (!battleIsFinish(arenaRecords)) { + try { + Thread.sleep(1000); + arenaRecords = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + ChampionshipLogic.fightTime_temp=1; + if(ChampionshipLogic.schedule==2&&(ChampionshipLogic.fightTime==2||ChampionshipLogic.fightTime==3)){ + boolean isAllWin=true; + Map states = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", String.class, Integer.class); + for (int i = 0; i 1){ + isAllWin=false; + break; + } + } + if(isAllWin){ + ChampionshipLogic.fightTime_temp=3; + } + } + + if (schedule == 2 && (fightTime !=3&&fightTime_temp!=3)) { + }else { + sendBetReward(); + } + sendAllProgressUpdate(); +// scoreToRedis(); +// +// if (schedule == 2 && fightTime !=3) { +// return; +// } +// sendBetReward(); + } catch (Exception e) { e.printStackTrace(); } } }); + sendAllProgressUpdate(); } - sendAllProgressUpdate(); + } - public static void sendAllProgressUpdate(){ + public static void sendAllProgressUpdate() { ArenaInfoProto.ChampionProgressUpdateIndication build = ArenaInfoProto.ChampionProgressUpdateIndication.newBuilder().setEndTime(endTime).setProgress(progress).build(); //向全服玩家广播进度变更信息 - for(ISession session : OnlineUserManager.sessionMap.values()){ - MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.CHAMPION_PROGRESS_UPDATE_INDICATION_VALUE,build,true); + for (ISession session : OnlineUserManager.sessionMap.values()) { + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.CHAMPION_PROGRESS_UPDATE_INDICATION_VALUE, build, true); } } - private static int getDuratimeByProgressState(int progressState){ + + private static int getDuratimeByProgressState(int progressState) { SChampionshipSetting sChampionshipSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting(); - if(progressState == 0){ - return sChampionshipSetting.getPrepareTime(); +// if(progressState == 0){ +// return sChampionshipSetting.getPrepareTime(); +// } +// if(progressState == 1){ +// return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime(); +// } +// if(progressState == 2){ +// return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime(); +// } +// return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime() + sChampionshipSetting.getSettleTime(); + if (progressState == 1) { + return sChampionshipSetting.getGuessTime(); + } else { + return sChampionshipSetting.getBattleTime() + sChampionshipSetting.getGuessTime(); } - if(progressState == 1){ - return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime(); - } - if(progressState == 2){ - return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime(); - } - return sChampionshipSetting.getPrepareTime() + sChampionshipSetting.getGuessTime() + sChampionshipSetting.getBattleTime() + sChampionshipSetting.getSettleTime(); } - - private static int getProgress(int progressTmp){ + private static int getProgress(int progressTmp) { SChampionshipSetting sChampionshipSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting(); - if(progressTmp attribute; + private int position; public int getTempleteId() { return templeteId; @@ -38,7 +39,24 @@ public class FamilyHeroInfo { this.attribute = attribute; } - public FamilyHeroInfo(int templeteId, int level, int star,Map attribute) { + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + + public FamilyHeroInfo(int templeteId, int level, int star, Map attribute, int position) { + this.templeteId = templeteId; + this.level = level; + this.star = star; + this.attribute = attribute; + this.position = position; + } + + public FamilyHeroInfo(int templeteId, int level, int star, Map attribute) { this.templeteId = templeteId; this.level = level; this.attribute = attribute; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 03a273257..f0120962b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -161,7 +161,7 @@ public class UserManager { if(canNull){ return null; } - throw new Exception("UserManager::getUser null exception"+user.getId()); + throw new Exception("UserManager::getUser null exception"+uid); } UserManager.addUser(user); return user; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index 78e024cc1..67e6fe754 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -86,7 +86,7 @@ public class GuildLogic { if(user.getGuildMyInfo().getFeteguild()!=guildId) return; - Set objects = config.keySet(); + Set objects = new HashSet<>( config.keySet()); objects.removeAll(user.getGuildMyInfo().getHadTakeReward()); for (Integer missionId : objects) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java index 135aa9ce1..be4a2a728 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java @@ -21,11 +21,56 @@ public class AreFightPro implements EndFightProcessor { winnerUid = arenaRecord.getDefUid(); failerUid = arenaRecord.getAttackId(); } - ChampionshipLogic.setScoreForSuccess(winnerUid,failerUid); + String key = String.valueOf(arenaRecord.getAttackId() * 2222 + String.valueOf(arenaRecord.getDefUid())); + + //胜负结果出了之后 选择一局记分 + Integer state = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", key, Integer.class); + boolean jump=false; + if(null == state){ + state=0; + }else if(state<2){ + jump=true; + } + if(ChampionshipLogic.getSchedule()==2){ + if(result==1){ + if(state==0){ + state=2; + }else if(state==3){ + state=5; + }else { + state=result; + } + }else { + if(state==0){ + state=3; + }else if(state==2){ + state=4; + }else{ + state=result;} + } + RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_ARENA_RECORD_THREE,"",key,state); + } + + if(!jump) { + if (ChampionshipLogic.getSchedule() == 2&&state<2) { + if (state == 0) { + winnerUid = arenaRecord.getDefUid(); + failerUid = arenaRecord.getAttackId(); + } else { + winnerUid = arenaRecord.getAttackId(); + failerUid = arenaRecord.getDefUid(); + } + } + System.out.println(arenaRecord.getId()+": "+arenaRecord.getTurn()+" : "+arenaRecord.getAttackId()+"AreFightPro state = " + state); + // ChampionshipLogic.setScoreForSuccess(winnerUid,failerUid,state<2); + } int warTime = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getWarTime(); CommonProto.FightData build = CommonProto.FightData.newBuilder().setFightType(9).setHeroFightInfos(fightResult.getFightTeamInfo()).addMonsterList(fightResult.getDefFightTeamInfo()).setFightSeed(fightResult.getSeed()).setFightMaxTime(warTime).build(); arenaRecord.setFightData(build.toByteArray()); RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_ARENA_RECORD,"",arenaRecord.getId(),arenaRecord); + + + } public ArenaRecord getArenaRecord() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 5e8e192ae..290a0bca9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -828,9 +828,9 @@ public class CombatLogic { propertiesMap.put(propertyName,propertiesMap.getOrDefault(propertyName,0)+1); } propertiesMap = sortByValueDescending(propertiesMap); - for(Map.Entry entry :propertiesMap.entrySet()){ - LOGGER.info("{}系类型数量为{}",entry.getKey(),entry.getValue()); - } +// for(Map.Entry entry :propertiesMap.entrySet()){ +// LOGGER.info("{}系类型数量为{}",entry.getKey(),entry.getValue()); +// } int[] normalProperties = new int[6]; //普通属性判断 int nomalIndex = 0; @@ -854,7 +854,7 @@ public class CombatLogic { user.getTeamPosManager().updateTeamPos(teamId, new int[0][]); return null; } - LOGGER.info("触发光环的ID为{}",elementId); + // LOGGER.info("触发光环的ID为{}",elementId); int[][] resultElement = configMap.get(elementId).getContent(); user.getTeamPosManager().updateTeamPos(teamId, resultElement); return resultElement; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java index e68a4d434..9ad6267e1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java @@ -40,7 +40,8 @@ public class FightDispatcher { //fight - gs public static void dispatcherAsyncToGs(FightResult fightResult) throws Exception { - map.get(fightResult.getId()).endfightProcess(fightResult); + EndFightProcessor remove = map.remove(fightResult.getId()); + remove.endfightProcess(fightResult); } public static long getFIghtId(){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index edf4c0467..f95ab25fb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -138,7 +138,13 @@ public class FightUtil { } - LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo); + + LuaValue getFightData ; + if(((PVPFightEvent) fightEvent).isRever()){ + getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo,true);//对方先手 + }else { + getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo); + } LuaValue getOptionData = FightDataUtil.getOptionData(fightEvent.getFrames()); int[] fightResult = CheckFight.getInstance().checkFight(fightSeed, fightEvent.getMostTime(), getFightData, getOptionData, fightEvent.getFightType().getFightType()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/PVPFightEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/PVPFightEvent.java index 5f4911c42..4736a9fd6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/PVPFightEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/PVPFightEvent.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.fight; public class PVPFightEvent extends FightEvent { private int defUid; private int defTeamId; + private boolean rever; //反转先后手 @@ -40,4 +41,12 @@ public class PVPFightEvent extends FightEvent { public void setAttackFightSnapData(DefFightSnapData attackFightSnapData) { this.attackFightSnapData = attackFightSnapData; } + + public boolean isRever() { + return rever; + } + + public void setRever(boolean rever) { + this.rever = rever; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index 2082d7612..7f94a1bcd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -46,11 +46,15 @@ public class FightDataUtil { } public static LuaValue getFinalPlayerFightData(CommonProto.FightTeamInfo heroTeam, CommonProto.FightTeamInfo enemyHeroTeam) { + return getFinalPlayerFightData(heroTeam,enemyHeroTeam,false); + + } + public static LuaValue getFinalPlayerFightData(CommonProto.FightTeamInfo heroTeam, CommonProto.FightTeamInfo enemyHeroTeam,boolean firstCamp) { LuaValue LuaTable = new LuaTable(); LuaTable.set("playerData", getPlayerData(heroTeam,0)); LuaValue enemyData = new LuaTable(); - enemyData.rawset( 1, getPlayerData(enemyHeroTeam,1)); + enemyData.rawset( 1, getPlayerData(enemyHeroTeam,1,firstCamp)); LuaTable.set("enemyData", enemyData); return LuaTable; @@ -168,8 +172,11 @@ public class FightDataUtil { return property; } - public static LuaValue getPlayerData(CommonProto.FightTeamInfo heroTeam,int position) { + return getPlayerData(heroTeam, position); + } + + public static LuaValue getPlayerData(CommonProto.FightTeamInfo heroTeam,int position,boolean first) { LuaValue playerData = new LuaTable(); for (int i = 1; i <= heroTeam.getFightUnitListCount(); i++) { playerData.rawset(i, getHeroFightUnit(heroTeam.getFightUnitList(i - 1),position)); @@ -177,6 +184,7 @@ public class FightDataUtil { playerData.set("teamSkill", getTeamSkill(heroTeam.getTeamSkillList())); playerData.set("teamPassive", getTeamPassive(heroTeam.getTeamPassiveList())); playerData.set("outData",heroTeam.getSpecialPassive()); + playerData.set("firstCamp",first?1:0); return playerData; } From e505a2e773ff4ea6f6f176e80afea561cffae3e3 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Sun, 2 Aug 2020 22:15:13 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=B9=B8=E8=BF=90=E6=8E=A2=E5=AE=9D?= =?UTF-8?q?=E6=AC=A1=E6=95=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/activity/GetLuckWheelRandHandler.java | 2 +- .../jieling/logic/mission/data/LuckyWheelTimesManager.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetLuckWheelRandHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetLuckWheelRandHandler.java index e49a89e6f..f6bf478fd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetLuckWheelRandHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetLuckWheelRandHandler.java @@ -147,7 +147,7 @@ public class GetLuckWheelRandHandler extends BaseHandler Date: Tue, 11 Aug 2020 09:12:09 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E5=B7=85=E5=B3=B0=E8=B5=9B=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/fight/CheckFight.java | 4 +- luafight/Modules/Battle/Logic/BattleLogic.lua | 19 ++++- .../com/ljsd/jieling/core/GlobalsDef.java | 1 + .../handler/champion/ChampinGetHandler.java | 35 ++++++--- .../champion/ChampionBetInfoHandler.java | 17 ++++- .../champion/ChampionGetMyHistoryHandler.java | 4 + .../champion/ChampionViewFinalHandler.java | 3 + .../ljsd/jieling/logic/blood/BloodLogic.java | 2 +- .../logic/championship/ChampionshipLogic.java | 13 ++-- .../ljsd/jieling/logic/fight/AreFightPro.java | 75 ++++++++----------- .../ljsd/jieling/logic/fight/FightUtil.java | 1 + .../com/ljsd/jieling/util/FightDataUtil.java | 2 +- 12 files changed, 107 insertions(+), 69 deletions(-) diff --git a/fightmanager/src/main/java/com/ljsd/fight/CheckFight.java b/fightmanager/src/main/java/com/ljsd/fight/CheckFight.java index 22031225a..aa62cc711 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/CheckFight.java +++ b/fightmanager/src/main/java/com/ljsd/fight/CheckFight.java @@ -106,10 +106,10 @@ public class CheckFight { int[] resultCache = new int[8];//对方阵容走配置 Todo 后面结构走配置 resultCache[0]=status; resultCache[1]=duration; - LOGGER.info(" lua check test fight result : "+ status); + // LOGGER.info(" lua check test fight result : "+ status); for (int i = 1; i <= result.length(); i++) { resultCache[i+1] = result.rawget(i).toint(); - LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i+1]); + // LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i+1]); } return resultCache; diff --git a/luafight/Modules/Battle/Logic/BattleLogic.lua b/luafight/Modules/Battle/Logic/BattleLogic.lua index bd991d9f8..bec28611f 100644 --- a/luafight/Modules/Battle/Logic/BattleLogic.lua +++ b/luafight/Modules/Battle/Logic/BattleLogic.lua @@ -84,6 +84,20 @@ function BattleLogic.Init(data, optionData, maxRound) BattleLogManager.Init(fightData) end +-- 检测先手阵营 +function BattleLogic.CheckFirstCamp() + -- 默认我方先手 + BattleLogic.FirstCamp = 0 + -- 数据不存在时,兼容老战斗数据 + if not fightData.playerData.firstCamp and not fightData.enemyData[BattleLogic.CurOrder].firstCamp then + return + end + -- 敌方先手 + if fightData.playerData.firstCamp == 0 and fightData.enemyData[BattleLogic.CurOrder].firstCamp == 1 then + BattleLogic.FirstCamp = 1 + end +end + function BattleLogic.StartOrder() -- BattleLogic.CurOrder = BattleLogic.CurOrder + 1 @@ -104,7 +118,8 @@ function BattleLogic.StartOrder() RoleManager.AddRole(orderList[i], orderList[i].position) end end - + -- 检测先后手 + BattleLogic.CheckFirstCamp() -- 开始战斗,延时一帧执行,避免战斗还没开始就释放了技能 BattleLogic.TurnRoundNextFrame() end @@ -156,7 +171,7 @@ function BattleLogic.TurnRound(debugTurn) -- 第一次进入 或者 本轮结束 初始化流程状态 if CurRound == 0 or (CurSkillPos[0] == 6 and CurSkillPos[1] == 6) then CurRound = CurRound + 1 - CurCamp = 0 + CurCamp = BattleLogic.FirstCamp -- 判断先手阵营 CurSkillPos[0] = 0 CurSkillPos[1] = 0 -- diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java index 385313d15..000e7f8a3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java @@ -92,6 +92,7 @@ public interface GlobalsDef { int EXPEDITION_TEAM =1001; // int CAR_DELAY_TEAM =1101; //车迟斗法 int DEATH_PATH_TEAM = 1201;//十绝阵 + int CHAMPION_TEAM = 1301; //巅峰赛 //特权解锁类型 int LEVEL_UNLOCK_PRIVILEGE = 1; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java index a52a5d211..aace8c196 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampinGetHandler.java @@ -77,11 +77,9 @@ public class ChampinGetHandler extends BaseHandler { List strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid), 0, -1); int state = -1; - Gson gson = new Gson(); for (String redisId : strings) { ArenaRecord record = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", redisId, ArenaRecord.class); if ((!record.getId().equals(arenaRecord.getId())) && record.getRoundTims() == roundTims) { - // System.out.println("record = " +gson.toJson(record)); if (record.getFightResult() == 1) { if (state == -1) { state = 2; @@ -99,24 +97,37 @@ public class ChampinGetHandler extends BaseHandler { state = record.getFightResult(); } } - System.out.println(state+"record = " +gson.toJson(record)); } } - if(schedule==2){ - if( realTimes < 6 && roundTims - 7 != realTimes) { - builder.setLoser(true); + if(ChampionshipLogic.getProgress()==-2){ + if(arenaRecord.getRoundTims()-7==5){ + if(state==0&&attackId==uid){ + builder.setLoser(true); + }else { + builder.setLoser(false); + } }else { - builder.setLoser(false); - } - }else if(schedule==1){ - if(roundTims!=roundTimes){ builder.setLoser(true); - }else { - builder.setLoser(false); } + }else { + if(schedule==2){ + if( roundTims - 7 != realTimes) { + builder.setLoser(true); + }else { + builder.setLoser(false); + } + }else if(schedule==1){ + if(roundTims!=roundTimes){ + builder.setLoser(true); + }else { + builder.setLoser(false); + } + } + } + builder.setProcess(state); builder.setChampionBattleInfo(builder1 .setMyInfo(ChampionshipLogic.getChampionBattleInfo(attackId)) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java index be755046c..3854b0e50 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java @@ -15,6 +15,7 @@ import com.ljsd.jieling.util.MessageUtil; import util.StringUtil; import java.util.List; +import java.util.Map; /** * 获取竞猜信息 @@ -55,11 +56,25 @@ public class ChampionBetInfoHandler extends BaseHandler strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(arenaRecord.getAttackId()), 0,-1); + +// Map states = RedisUtil.getInstence().getMapValues(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", String.class, Integer.class); +// String key = String.valueOf(v.getAttackId() * 2222 + String.valueOf(v.getDefUid())); int state =-1; +// Integer stateInteger = states.get(key); +// if (null!=stateInteger) { +// state =stateInteger +// } +// + List strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(arenaRecord.getAttackId()), 0,-1); +// + + for (String redisId:strings) { ArenaRecord record = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", redisId, ArenaRecord.class); + if(record.getTurn()==-1){ + continue; + } if((!record.getId().equals(arenaRecord.getId()))&&record.getRoundTims()==(arenaRecord.getRoundTims())){ if(record.getFightResult()==0){ if(state==-1){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java index 136820800..ba2f5cb6f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionGetMyHistoryHandler.java @@ -42,6 +42,10 @@ public class ChampionGetMyHistoryHandler extends BaseHandler { List myArenaRecordInfos = RedisUtil.getInstence().getMapEntrys(RedisKey.CHAMPION_ARENA_RECORD, "", ids, ArenaRecord.class); Map robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class); for (ArenaRecord arenaRecord : myArenaRecordInfos) { + if(arenaRecord.getTurn()==-1){ + //3局两胜 跳过 + continue; + } int attackUid = arenaRecord.getAttackId(); int enemyId = arenaRecord.getDefUid(); int fightResult = arenaRecord.getFightResult(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionViewFinalHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionViewFinalHandler.java index 9fd650b25..0697e1145 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionViewFinalHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionViewFinalHandler.java @@ -69,6 +69,9 @@ public class ChampionViewFinalHandler extends BaseHandler joinMembers) throws Exception { - int snapTeamId = GlobalsDef.TEAM_ARENA_DEFENSE; + int snapTeamId = GlobalsDef.CHAMPION_TEAM; Map config = STableManager.getConfig(SArenaRobotConfig.class); if (config.containsKey(uid)) { @@ -755,6 +754,7 @@ public class ChampionshipLogic { delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_RANK, "")); delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_FINAL_RECODED_IDS, "")); delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_GUESSS_UIDS, "")); + delKeys.add(RedisUtil.getInstence().getKey(RedisKey.CHAMPION_ARENA_RECORD_THREE, "")); //我的历史结果 joinUids.forEach(uid -> { @@ -1114,9 +1114,9 @@ public class ChampionshipLogic { if (null == user) { return null; } - int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.TEAM_ARENA_DEFENSE, false); + int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CHAMPION_TEAM, false); if (type == 0) { - List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.TEAM_ARENA_DEFENSE); + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.CHAMPION_TEAM); Map heroMap = user.getHeroManager().getHeroMap(); List heroTids = new ArrayList<>(teamPosHeroInfoList.size()); for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { @@ -1242,7 +1242,6 @@ public class ChampionshipLogic { @Override public void run() { try { - snapPlayFightInfo(true); List curArenaRecordIds = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_CUR_JOIN_IDS, "", 0, -1); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java index be4a2a728..fca54ed9f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java @@ -15,55 +15,44 @@ public class AreFightPro implements EndFightProcessor { public void endfightProcess(FightResult fightResult) { int result = fightResult.getCheckResult()[0]; arenaRecord.setFightResult(fightResult.getCheckResult()[0]); - int winnerUid = arenaRecord.getAttackId(); - int failerUid = arenaRecord.getDefUid(); - if(result == 0){ - winnerUid = arenaRecord.getDefUid(); - failerUid = arenaRecord.getAttackId(); - } - String key = String.valueOf(arenaRecord.getAttackId() * 2222 + String.valueOf(arenaRecord.getDefUid())); - //胜负结果出了之后 选择一局记分 - Integer state = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", key, Integer.class); - boolean jump=false; - if(null == state){ - state=0; - }else if(state<2){ - jump=true; - } if(ChampionshipLogic.getSchedule()==2){ - if(result==1){ - if(state==0){ - state=2; - }else if(state==3){ - state=5; - }else { - state=result; + String key = String.valueOf(arenaRecord.getAttackId() * 2222 + String.valueOf(arenaRecord.getDefUid())); + //胜负结果出了之后 选择一局记分 + boolean jump=false; + Integer state = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD_THREE, "", key, Integer.class); + if(null ==state){ + state=0; + }else if(state<2){ + if(arenaRecord.getTurn()==3){ + arenaRecord.setTurn(-1); } - }else { - if(state==0){ - state=3; - }else if(state==2){ - state=4; - }else{ - state=result;} + jump =true; } - RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_ARENA_RECORD_THREE,"",key,state); + if(!jump){ + if(result==1){ + if(state==0){ + state=2; + }else if(state==3){ + state=5; + }else { + state=result; + } + }else { + if(state==0){ + state=3; + }else if(state==2){ + state=4; + }else{ + state=result;} + } + System.out.println("keykeykeykeykeykeykey"+key+": "+arenaRecord.getId()+": "+arenaRecord.getTurn()+" : "+arenaRecord.getAttackId()+"AreFightPro state = " + state); + RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_ARENA_RECORD_THREE,"",key,state); + } + } - if(!jump) { - if (ChampionshipLogic.getSchedule() == 2&&state<2) { - if (state == 0) { - winnerUid = arenaRecord.getDefUid(); - failerUid = arenaRecord.getAttackId(); - } else { - winnerUid = arenaRecord.getAttackId(); - failerUid = arenaRecord.getDefUid(); - } - } - System.out.println(arenaRecord.getId()+": "+arenaRecord.getTurn()+" : "+arenaRecord.getAttackId()+"AreFightPro state = " + state); - // ChampionshipLogic.setScoreForSuccess(winnerUid,failerUid,state<2); - } + int warTime = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getWarTime(); CommonProto.FightData build = CommonProto.FightData.newBuilder().setFightType(9).setHeroFightInfos(fightResult.getFightTeamInfo()).addMonsterList(fightResult.getDefFightTeamInfo()).setFightSeed(fightResult.getSeed()).setFightMaxTime(warTime).build(); arenaRecord.setFightData(build.toByteArray()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index f95ab25fb..2268ec83b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -141,6 +141,7 @@ public class FightUtil { LuaValue getFightData ; if(((PVPFightEvent) fightEvent).isRever()){ + deffightTeamInfo = CommonProto.FightTeamInfo.newBuilder().mergeFrom(deffightTeamInfo).setFirstCamp(1).build(); getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo,true);//对方先手 }else { getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index 0bd0daa4a..c0ac6dc10 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -173,7 +173,7 @@ public class FightDataUtil { } public static LuaValue getPlayerData(CommonProto.FightTeamInfo heroTeam,int position) { - return getPlayerData(heroTeam, position); + return getPlayerData(heroTeam, position,false); } public static LuaValue getPlayerData(CommonProto.FightTeamInfo heroTeam,int position,boolean first) { From dcfa14717c22f6a6561ac8a626514e6e2b228c03 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 14 Aug 2020 21:24:04 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E5=B7=85=E5=B3=B0=E8=B5=9B=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/ChampionFunction.java | 2 +- .../champion/ChampionBetInfoHandler.java | 34 ++++++++----------- .../logic/championship/ChampionshipLogic.java | 5 +++ 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/function/ChampionFunction.java b/serverlogic/src/main/java/com/ljsd/jieling/core/function/ChampionFunction.java index 4a225d00d..bc6fe8491 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/function/ChampionFunction.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/function/ChampionFunction.java @@ -16,6 +16,6 @@ public class ChampionFunction implements FunctionManager { @Override public void closeAction() throws Exception { - ChampionshipLogic.close(); + // ChampionshipLogic.close(); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java index 3854b0e50..7e6e55457 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/champion/ChampionBetInfoHandler.java @@ -67,8 +67,6 @@ public class ChampionBetInfoHandler extends BaseHandler strings = RedisUtil.getInstence().lGet(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(arenaRecord.getAttackId()), 0,-1); // - - for (String redisId:strings) { ArenaRecord record = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", redisId, ArenaRecord.class); @@ -76,26 +74,24 @@ public class ChampionBetInfoHandler extends BaseHandler Date: Fri, 24 Jul 2020 14:33:37 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=A4=A9=E5=AE=AB=E7=A7=98=E5=AE=9D?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Expedition/TakeLayRewardHandler.java | 2 +- .../Expedition/TakeTreasureRewardHandler.java | 4 +- .../logic/expedition/ExpeditionLogic.java | 40 +++---------------- 3 files changed, 8 insertions(+), 38 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeLayRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeLayRewardHandler.java index a1942b1a0..34ee10c8c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeLayRewardHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeLayRewardHandler.java @@ -125,7 +125,7 @@ public class TakeLayRewardHandler extends BaseHandler rewardStatusMap = user.getExpeditionManager().getWorldTreasureReward().getRewardStatusMap(); - ExpeditionLogic.sendTreasureRewardUpdate(iSession,user.getExpeditionManager().getWorldTreasureReward().getScore(),rewardStatusMap); + ExpeditionLogic.sendTreasureRewardUpdate(iSession,user.getExpeditionManager().getWorldTreasureReward().getScore(),rewardStatusMap,user.getExpeditionManager().getWorldTreasureReward().getCreateTime()); Expedition.TakeExpeditionBoxRewardResponse builder = Expedition.TakeExpeditionBoxRewardResponse.newBuilder().setDrop(drop).addAllLeve(objects).build(); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EXPEDITION_TAKE_BOXREWARD_RESONSE_VALUE, builder, true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java index c6bb42081..e48f6f710 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/TakeTreasureRewardHandler.java @@ -59,7 +59,7 @@ public class TakeTreasureRewardHandler extends BaseHandler stateUpdateMap = new HashMap<>(); stateUpdateMap.put(id,changeState); - ExpeditionLogic.sendTreasureRewardUpdate(iSession,worldTreasureReward.getScore(),stateUpdateMap); + ExpeditionLogic.sendTreasureRewardUpdate(iSession,worldTreasureReward.getScore(),stateUpdateMap,worldTreasureReward.getCreateTime()); }else{ Map stateUpdateMap = new HashMap<>(); Set sWorldBossTreasureConfigs = idsByPeriods.get(round); @@ -76,7 +76,7 @@ public class TakeTreasureRewardHandler extends BaseHandleritem[0]){ -// continue; -// } -// differentDays-=item[1]; -// if(differentDays<0){ -// newRound = item[0]; -// needReset =true; -// break; -// } -// } -// if(!needReset){ -// differentDays=differentDays % sumPeriod; -// for(int[] item : treasureTime){ -// differentDays-=item[1]; -// if(differentDays<0){ -// newRound = item[0]; -// break; -// } -// } -// needReset=true; -// } //重置 if(TimeUtils.nowInt()>=worldTreasureReward.getCreateTime()){ user.getExpeditionManager().resetTreasureReward(1); @@ -819,15 +788,16 @@ public class ExpeditionLogic { Map> idsByPeriods = worldBossTreasureStaticConfig.getIdsByPeriods(); Map changeStateMap = new HashMap<>(rewardStatusMap); idsByPeriods.get(worldTreasureReward.getRound()).forEach(item->changeStateMap.putIfAbsent(item.getId(),0)); - sendTreasureRewardUpdate(session,0,changeStateMap); + sendTreasureRewardUpdate(session,0,changeStateMap,worldTreasureReward.getCreateTime()); } } - public static void sendTreasureRewardUpdate(ISession iSession,int score,Map changeStatusMap ){ + public static void sendTreasureRewardUpdate(ISession iSession,int score,Map changeStatusMap,int time){ Expedition.TreasureStateIndicaion.Builder builder = Expedition.TreasureStateIndicaion.newBuilder().setScore(score); + builder.setResetTime(time); changeStatusMap.forEach((id,status)-> builder.addTreasureRewardState(Expedition.TreasureRewardState.newBuilder().setId(id).setState(status).build())); - MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.EXPEDITION_TREASURE_STATE_INDICATION_VALUE,builder.build(),true); + MessageUtil.sendIndicationMessage(iSession,1, MessageTypeProto.MessageType.EXPEDITION_TREASURE_STATE_INDICATION_VALUE,builder.build(),true); } From f7bdc25b3c6e171e5076f0a454d68f59be61591e Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 24 Jul 2020 14:34:15 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E8=8B=B1=E9=9B=84=E5=BD=92=E5=85=83?= =?UTF-8?q?=E3=80=81=E5=88=86=E8=A7=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/jieling/logic/hero/HeroLogic.java | 5 +++-- .../main/java/com/ljsd/jieling/logic/item/ItemLogic.java | 4 +++- tablemanager/src/main/java/config/SCHeroRankUpConfig.java | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) 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 41195cd12..0be56f1a9 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 @@ -2338,10 +2338,11 @@ public class HeroLogic{ int templateId = hero.getTemplateId(); int star = hero.getStar(); Map sHeroReturnMap = SHeroReturn.sheroReturnMap.get(templateId); - if(sHeroReturnMap == null || !sHeroReturnMap.containsKey(breakId)){ + int breakFloor = breakId==0?0:STableManager.getConfig(SCHeroRankUpConfig.class).get(breakId).getPhase()[1]; + if(sHeroReturnMap == null || !sHeroReturnMap.containsKey(breakFloor)){ throw new ErrorCodeException(ErrorCode.newDefineCode("not satisfy")); } - SHeroReturn sHeroReturn = sHeroReturnMap.get(breakId); + SHeroReturn sHeroReturn = sHeroReturnMap.get(breakFloor); boolean b = ItemUtil.itemCost(user, sHeroReturn.getReturnConsume(), BIReason.HERO_BACK_CONSUME, templateId * 100 + star); if(!b){ throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index 7af213d71..643e84ae5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -383,7 +383,9 @@ public class ItemLogic { heroManager.removeHero(uid,heroId); int[][] sumConsume = SHeroLevlConfig.getsHeroLevlConfigMap().get(hero.getLevel()).getSumConsume(); SHeroSacrifice starSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(1, hero.getStar()); - SHeroSacrifice breakSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(2, hero.getBreakId()); + int breakFloor = hero.getBreakId()==0?0:STableManager.getConfig(SCHeroRankUpConfig.class).get(hero.getBreakId()).getPhase()[1]; + + SHeroSacrifice breakSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(2, breakFloor); for(int[] item:sumConsume){ baseItemMap.put(item[0],baseItemMap.getOrDefault(item[0],0)+item[1]); } diff --git a/tablemanager/src/main/java/config/SCHeroRankUpConfig.java b/tablemanager/src/main/java/config/SCHeroRankUpConfig.java index c414570e0..dbcc2025a 100644 --- a/tablemanager/src/main/java/config/SCHeroRankUpConfig.java +++ b/tablemanager/src/main/java/config/SCHeroRankUpConfig.java @@ -29,6 +29,8 @@ public class SCHeroRankUpConfig implements BaseConfig{ private int judgeClass; + private int[] phase; + @Override public void init() throws Exception { } @@ -79,4 +81,8 @@ public class SCHeroRankUpConfig implements BaseConfig{ public int[][] getSumConsume() { return sumConsume; } + + public int[] getPhase() { + return phase; + } } From 4d05697aed842baa21e438af74ef6e7389fa149c Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 24 Jul 2020 14:34:56 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=85=85=E5=80=BC=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E3=80=81=E6=96=B0=E6=89=8B=E5=BC=95=E5=AF=BC=E5=9F=8B=E7=82=B9?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java | 3 +-- .../java/com/ljsd/jieling/logic/player/PlayerLogic.java | 2 +- .../java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java | 6 +++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java index 19ada2af4..6a1de8208 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java @@ -15,7 +15,7 @@ public enum ReportEventEnum { CREATE_ACCOUNT(1,"create_account", new CreateRoleEventHandler(),new String[]{""}), APP_LOGIN(2,"app_login", new LoginEventHandler(),new String[]{""}), CREATE_ROLE(3,"create_role", new CreateRoleEventHandler(),new String[]{"role_name"}), - GUILD(4,"guild", new CommonEventHandler(),new String[]{"step_id","step_name","rewards_list","guild_start_time"}), + GUIDE(4,"guide", new CommonEventHandler(),new String[]{"step_id"}), LEVEL_UP(5,"level_up", new UserLevelUpEventHandler(),new String[]{"level","promotion_level","improved_level"}), MISSION_START(6,"mission_start", new CommonEventHandler(),new String[]{"mission_id","mission_name"}), MISSION_COMPLETE(7,"mission_complete", new CommonEventHandler(),new String[]{"mission_id","mission_name","reward_list","mission_start_time"}), @@ -45,7 +45,6 @@ public enum ReportEventEnum { ALLOW_FRIENDS_ASK(31,"allow_friends_ask", new CommonEventHandler(),new String[]{"target_id","target_name","target_level","entrance"}), SEND_MESSAGE(32,"send_message", new CommonEventHandler(),new String[]{"message_type","message_content"}), OPEN_MAIL(33,"open_mail", new CommonEventHandler(),new String[]{""}), - GUIDE(34,"guide", new CommonEventHandler(),new String[]{"step_id"}), VIP_LEVEL_UP(100,"", new VipLevelUpEventHandler(),new String[]{""}); 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 208559766..35fc9f0a3 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 @@ -105,7 +105,7 @@ public class PlayerLogic { User user = UserManager.getUser(uid); user.getPlayerInfoManager().updateGuidePoint(type,id); if(type==1){ - ReportUtil.onReportEvent(user,ReportEventEnum.GUILD.getType(),String.valueOf(id)); + ReportUtil.onReportEvent(user,ReportEventEnum.GUIDE.getType(),String.valueOf(id)); } MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SAVE_NEW_PLAYER_GUIDE_POINT_RESPONSE_VALUE,null,true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index e2d328114..dae344e2d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -357,20 +357,20 @@ public class BuyGoodsLogic { // Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),goodsId)); MongoUtil.getLjsdMongoTemplate().lastUpdate(); sendGiftGooodsIndication(uid); - onChargeSuccess(uid,sRechargeCommodityConfig.getPrice(),0);//充值成功上报 + onChargeSuccess(uid,sRechargeCommodityConfig.getPrice(),0,orderId);//充值成功上报 Map mapReward = ItemUtil.arrayToMap(baseReward); ReportUtil.onReportEvent(user, ReportEventEnum.ORDER_COMPLETE.getType(),orderId,price,user.getPlayerInfoManager().getBundle_id(),user.getPlayerInfoManager().getChannel_id(),String.valueOf(GameApplication.serverId),String.valueOf(goodsId),sRechargeCommodityConfig.getName(),mapReward.keySet(),mapReward.values()); return resultRes; } - private static void onChargeSuccess(int uid,int amount,int virtualAmount){ + private static void onChargeSuccess(int uid,int amount,int virtualAmount,String orderId){ RechargeEvent rechargeEvent = new RechargeEvent(); rechargeEvent.setModule("GameAnalysis"); rechargeEvent.setIp(""); rechargeEvent.setName("charge"); rechargeEvent.setIndex("wjtsq7xrwb48t2uw"); rechargeEvent.setIdentify(String.valueOf(uid)); - rechargeEvent.setProperties(new RechargeEventProp("",amount,virtualAmount,"CNY","","")); + rechargeEvent.setProperties(new RechargeEventProp(orderId,amount,virtualAmount,"CNY","","")); String s = DataMessageUtils.sendRechargePost(rechargeEvent); if(s.equals("1")){ LOGGER.info("{}充值上报成功,价格为{}",uid,amount); From 4a64db267f68dd08c838e51de55326fbebcf2642 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 24 Jul 2020 17:19:31 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E5=A4=A9=E5=AE=AB=E7=A7=98=E5=AE=9D?= =?UTF-8?q?=E8=B4=AD=E4=B9=B0=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/logic/expedition/ExpeditionLogic.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index e061d8f3e..9a934a610 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -21,6 +21,7 @@ import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.store.BuyGoodsLogic; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; @@ -766,7 +767,7 @@ public class ExpeditionLogic { } } - public static void checkAndResetTreasure(User user){ + public static void checkAndResetTreasure(User user) throws Exception { WorldTreasureReward worldTreasureReward = user.getExpeditionManager().getWorldTreasureReward(); int createTime =worldTreasureReward.getCreateTime(); if(createTime==0){ @@ -776,6 +777,8 @@ public class ExpeditionLogic { if(TimeUtils.nowInt()>=worldTreasureReward.getCreateTime()){ user.getExpeditionManager().resetTreasureReward(1); sendAllTreasureInfo(user); + BuyGoodsLogic.sendGiftGooodsIndication(user.getId()); + user.getPlayerInfoManager().getRechargeInfo().updateBuyGoodsTimes(106,0); } } From 9948be8c188d74b5b570bb7284fad9a59833b6bf Mon Sep 17 00:00:00 2001 From: lvxinran Date: Sat, 25 Jul 2020 14:39:42 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=96=B0=E6=89=8B=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=89=8D=E7=AB=AF=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java index 6a1de8208..f36e91196 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java @@ -15,7 +15,7 @@ public enum ReportEventEnum { CREATE_ACCOUNT(1,"create_account", new CreateRoleEventHandler(),new String[]{""}), APP_LOGIN(2,"app_login", new LoginEventHandler(),new String[]{""}), CREATE_ROLE(3,"create_role", new CreateRoleEventHandler(),new String[]{"role_name"}), - GUIDE(4,"guide", new CommonEventHandler(),new String[]{"step_id"}), +// GUIDE(4,"guide", new CommonEventHandler(),new String[]{"step_id"}), LEVEL_UP(5,"level_up", new UserLevelUpEventHandler(),new String[]{"level","promotion_level","improved_level"}), MISSION_START(6,"mission_start", new CommonEventHandler(),new String[]{"mission_id","mission_name"}), MISSION_COMPLETE(7,"mission_complete", new CommonEventHandler(),new String[]{"mission_id","mission_name","reward_list","mission_start_time"}), From 1bab17588807343bb5f8f63a3624ae43eab57fdc Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 17 Aug 2020 02:41:43 +0800 Subject: [PATCH 11/13] Merge branch 'master' of http://60.1.1.230/backend/jieling_server into robottest --- luafight/Modules/Battle/Logic/BattleLogic.lua | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/luafight/Modules/Battle/Logic/BattleLogic.lua b/luafight/Modules/Battle/Logic/BattleLogic.lua index bd991d9f8..bec28611f 100644 --- a/luafight/Modules/Battle/Logic/BattleLogic.lua +++ b/luafight/Modules/Battle/Logic/BattleLogic.lua @@ -84,6 +84,20 @@ function BattleLogic.Init(data, optionData, maxRound) BattleLogManager.Init(fightData) end +-- 检测先手阵营 +function BattleLogic.CheckFirstCamp() + -- 默认我方先手 + BattleLogic.FirstCamp = 0 + -- 数据不存在时,兼容老战斗数据 + if not fightData.playerData.firstCamp and not fightData.enemyData[BattleLogic.CurOrder].firstCamp then + return + end + -- 敌方先手 + if fightData.playerData.firstCamp == 0 and fightData.enemyData[BattleLogic.CurOrder].firstCamp == 1 then + BattleLogic.FirstCamp = 1 + end +end + function BattleLogic.StartOrder() -- BattleLogic.CurOrder = BattleLogic.CurOrder + 1 @@ -104,7 +118,8 @@ function BattleLogic.StartOrder() RoleManager.AddRole(orderList[i], orderList[i].position) end end - + -- 检测先后手 + BattleLogic.CheckFirstCamp() -- 开始战斗,延时一帧执行,避免战斗还没开始就释放了技能 BattleLogic.TurnRoundNextFrame() end @@ -156,7 +171,7 @@ function BattleLogic.TurnRound(debugTurn) -- 第一次进入 或者 本轮结束 初始化流程状态 if CurRound == 0 or (CurSkillPos[0] == 6 and CurSkillPos[1] == 6) then CurRound = CurRound + 1 - CurCamp = 0 + CurCamp = BattleLogic.FirstCamp -- 判断先手阵营 CurSkillPos[0] = 0 CurSkillPos[1] = 0 -- From 20d9ebdd487662e2cd543bc9f71da10092389b1f Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 17 Aug 2020 02:45:58 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E5=9C=BA=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SArenaRobotStaticConfig.java | 23 ++++++++++++++----- .../logic/expedition/ExpeditionLogic.java | 18 ++++++++++----- 2 files changed, 29 insertions(+), 12 deletions(-) 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 7f135408d..f07face53 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 @@ -7,11 +7,12 @@ import config.SWorkShopTechnology; import manager.AbstractClassStaticConfig; import manager.STableManager; import manager.Table; +import util.MathUtils; import java.util.*; public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { - private static TreeMap force2robotId; + private static TreeMap> force2robotId; @Override public void registConfigs(Set registConfigs) { registConfigs.add(SArenaRobotConfig.class.getAnnotation(Table.class).name()); @@ -21,6 +22,7 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { public void figureConfigs() { force2robotId = new TreeMap<>(); Map integerSArenaRobotConfigMap = SArenaRobotConfig.getsArenaRobotConfigMap(); + for(SArenaRobotConfig sArenaRobotConfig : integerSArenaRobotConfigMap.values()){ List heroList = sArenaRobotConfig.getHeroList(); int heroLevel = sArenaRobotConfig.getRobotLevel(); @@ -36,7 +38,13 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { } int totleForce = HeroLogic.getInstance().calRobotTotalForce(sArenaRobotConfig); sArenaRobotConfig.setTotalForce(totleForce); - force2robotId.put(totleForce,sArenaRobotConfig.getId()); + LinkedList integers = force2robotId.get(totleForce); + if(integers==null){ + integers =new LinkedList<>(); + force2robotId.put(totleForce,integers); + } + integers.add(sArenaRobotConfig.getId()); + force2robotId.put(totleForce,integers); } int[][] returnMaterials = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getReturnMaterials(); @@ -53,10 +61,13 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig { public static Integer getFloorForce2robotId(int force) { - Map.Entry entry = force2robotId.ceilingEntry(force); + Map.Entry> entry = force2robotId.ceilingEntry(force); if(null==entry){ - return force2robotId.firstEntry().getValue(); + LinkedList value = force2robotId.firstEntry().getValue(); + int num = MathUtils.randomInt(value.size()); + return value.get(num); } - return entry.getValue(); - } + LinkedList value = entry.getValue(); + int num = MathUtils.randomInt(value.size()); + return value.get(num); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index 9a934a610..c94ae9a93 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -315,7 +315,13 @@ public class ExpeditionLogic { int minFoce = sExpeditionSetting.getMatchForce()[leve-1][0]; int manFoce = sExpeditionSetting.getMatchForce()[leve-1][1]; - int standerFoce = (int) (user.getPlayerInfoManager().getMaxForce() * ((minFoce / 10000f) + ((float) nodeInfo.getLay()) / size * ((float) (manFoce - minFoce)/10000f))); + float v = user.getPlayerInfoManager().getMaxForce() * ((minFoce / 10000f)); + System.out.println("v = " + v); + float v1 = (minFoce / 10000f) + ((float) nodeInfo.getLay()) / 11 * ((float) (manFoce - minFoce) / 10000f); + System.out.println("v1 = " + v1); + int standerFoce = (int) (user.getPlayerInfoManager().getMaxForce() * ((minFoce / 10000f) + ((float) nodeInfo.getLay()) / 11 * ((float) (manFoce - minFoce)/10000f))); + + float randomForce = (standerFoce * ((sExpeditionSetting.getMatchForceRange()[0] + (int) (Math.random() * (sExpeditionSetting.getMatchForceRange()[1] - sExpeditionSetting.getMatchForceRange()[0]))) / 10000f)); if(nodeInfo.getType()==NODETYPE_ADVANCE){ @@ -325,7 +331,7 @@ public class ExpeditionLogic { } Set> typedTuples = RedisUtil.getInstence().rangeByScoreWithScores(RedisKey.AREDEF_TEAM_FORCE_RANK, "", 0, randomForce); - if (typedTuples.size() == 0) { + // if (typedTuples.size() == 0) { //战力没有获取到 从机器人中选 // Set set = ArenaLogic.randomRobot(SArenaSetting.getSArenaSetting().getScore(), 1); //// if (set.size() == 0) { @@ -336,10 +342,10 @@ public class ExpeditionLogic { int robotId= SArenaRobotStaticConfig.getFloorForce2robotId((int)randomForce); SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(robotId); snapOneFightInfo(nodeInfo, sArenaRobotConfig); - } else { - String serarchIdFromRank = typedTuples.iterator().next().getValue(); - snapOneFightInfo(user, nodeInfo, Integer.valueOf(serarchIdFromRank)); - } + // } else { + // String serarchIdFromRank = typedTuples.iterator().next().getValue(); + // snapOneFightInfo(user, nodeInfo, Integer.valueOf(serarchIdFromRank)); + // } } if(nodeInfo.getType()==ExpeditionLogic.NODETYPE_GREED||nodeInfo.getType() ==ExpeditionLogic.NODETYPE_TRY){ From b40e4a57af27bd30da471fb484914331f9cc4e8e Mon Sep 17 00:00:00 2001 From: lvxinran Date: Sat, 25 Jul 2020 15:14:06 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=B0=E6=89=8B?= =?UTF-8?q?=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/player/PlayerLogic.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 35fc9f0a3..5794ba83d 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 @@ -104,9 +104,9 @@ public class PlayerLogic { int uid = session.getUid(); User user = UserManager.getUser(uid); user.getPlayerInfoManager().updateGuidePoint(type,id); - if(type==1){ - ReportUtil.onReportEvent(user,ReportEventEnum.GUIDE.getType(),String.valueOf(id)); - } +// if(type==1){//打点改为前端 +// ReportUtil.onReportEvent(user,ReportEventEnum.GUIDE.getType(),String.valueOf(id)); +// } MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SAVE_NEW_PLAYER_GUIDE_POINT_RESPONSE_VALUE,null,true); }