From d4daed3d65bf0dff9d8748058a4ec1bca6747551 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Thu, 18 Nov 2021 21:08:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E6=9C=8D=E7=81=B5=E8=84=89=E7=A7=98?= =?UTF-8?q?=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 15 +++ .../CrossLingmaiSecretAreaBattleHandler.java | 126 +++++++++++------- .../CrossLingmaiSecretAreaInfoHandler.java | 96 ++++++------- .../CrossLingmaiSecretAreaRecordHandler.java | 10 +- .../logic/arena/CrossLingmaiLogic.java | 42 +++++- .../ljsd/jieling/thread/task/MinuteTask.java | 4 +- 6 files changed, 184 insertions(+), 109 deletions(-) diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index c1857e156..51186dc6c 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -1624,6 +1624,21 @@ public class TimeUtils { calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } + //周几的零点 + public static long getWeekZero(int weekDay){ + if(weekDay ==7){ + weekDay =1; + }else { + weekDay +=1; + } + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set( Calendar.DAY_OF_WEEK,weekDay); + return calendar.getTimeInMillis(); + } /** * 5月6日首冲bug解决方案 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java index 4345c3f16..1bff57397 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaBattleHandler.java @@ -63,27 +63,41 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class); - int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid,lingMaiMap); - if(myLingmaiId >= id){ + int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid, lingMaiMap); + if (myLingmaiId != 0 && myLingmaiId < id) { MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true); return; } //跨服灵脉锁 RedisUtil redisUtil = RedisUtil.getInstence(); - boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK"+ RedisKey.Delimiter_colon +crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND*500 ); - if(!lock){ + boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND * 500); + if (!lock) { //没有拿到锁直接返回 - LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁",crossGroup,group); + LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁", crossGroup, group); return; } + //检测特权次数 + boolean countBol = PlayerLogic.getInstance().check(user, request.getPrivilageTypeId(), 1); + if (request.getPrivilageTypeId() == 0 || !countBol) { + LOGGER.error("跨服灵脉秘境挑战失败,挑战id:{},挑战结果:{}", request.getPrivilageTypeId(), countBol); + throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT, "挑战次数不足"); + } + SLodeConfig config = SLodeConfig.lodeConfig.get(id); + AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); if (!lingMaiMap.containsKey(String.valueOf(id))) { //没人占领 攻击机器人 pve - SLodeConfig config = SLodeConfig.lodeConfig.get(id); if (config == null) { return; } @@ -98,35 +112,49 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler 10 ? 10 : ((TimeUtils.nowInt() - myLingmai.getOccupyTime()) / 60); + myLingmai.setScore1(myLingmai.getScore1()+second*config.getRewardList()[0][1]); + int score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime(); + rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); + rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); + //清除已有灵脉数据 + lingMaiMap.remove(String.valueOf(myLingmaiId)); + RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO, + crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId)); + } + + LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea); } - }else { - //PVP - // 组装真人数据 - // 战斗逻辑 + res.setResult(fightResult.getResult()); + } else { + //PVP + // 组装真人数据 + // 战斗逻辑 int defUid = lingMaiMap.get(String.valueOf(id)).getUid(); CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(defUid); - if (csPlayer == null){ + if (csPlayer == null) { throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT); } //其他服玩家rpc 数据调用 CrossArenaManager crossArenaManager = null; int myforce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false); int defforce = 0; - - if(GameApplication.serverId != csPlayer.getServerId()){ + if (GameApplication.serverId != csPlayer.getServerId()) { crossArenaManager = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer); - defforce = crossArenaManager.getTotalForceByTeam().getOrDefault( TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(),0); + defforce = crossArenaManager.getTotalForceByTeam().getOrDefault(TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), 0); } - CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, null); + CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, null); //对手 - CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(csPlayer, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, crossArenaManager); - + CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(csPlayer, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, crossArenaManager); FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(uid, defUid, fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), myforce < defforce); int seed = fightResult.getSeed(); @@ -140,38 +168,41 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler10?10:(TimeUtils.nowInt()-oldOwner.getOccupyTime()); - int score =oldOwner.getScore1()+1* second; - AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); - rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score); - - if(myLingmaiId !=0) { + int second = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60); + oldOwner.setScore1(oldOwner.getScore1()+second*config.getRewardList()[0][1]); + int score = oldOwner.getScore1() + config.getRewardList()[0][1]*oldOwner.getOccupyTime(); + rank.addRank(defUid, String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); + if (myLingmaiId != 0) { //本人已有灵脉结算 LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者 - second =(TimeUtils.nowInt()-myLingmai.getOccupyTime())/60>10?10:(TimeUtils.nowInt()-myLingmai.getOccupyTime()); - score =myLingmai.getScore1()+1* second; + config = SLodeConfig.lodeConfig.get(myLingmaiId); + second = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60); + myLingmai.setScore1(myLingmai.getScore1()+second*config.getRewardList()[0][1]); + myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); + score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime(); rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); - rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score); + rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score); //两边都计算分 置换 - oldOwner.setScore1(score); - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId),oldOwner); + //oldOwner.setScore1(score); + oldOwner.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); + oldOwner.setId(myLingmaiId); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId), oldOwner); } //易主 - LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id,uid,user); - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id),lingMaiSecretArea); - //挑战记录 + LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user); + RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea); //挑战者记录 - String key1 = RedisKey.getKey(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(user.getId()), false); long defLenth = redisUtil.lGetListSize(key1); if (defLenth > 20) { redisUtil.lPop(key1); } - ArenaRecord arenaRecord = new ArenaRecord(); + ArenaRecord arenaRecord = new ArenaRecord(); arenaRecord.setType(0); arenaRecord.setUserName(csPlayer.getName()); arenaRecord.setId(String.valueOf(id)); @@ -186,29 +217,26 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler 20) { redisUtil.lPop(key2); } - ArenaRecord arenaRecordDef = new ArenaRecord(); + ArenaRecord arenaRecordDef = new ArenaRecord(); arenaRecordDef.setType(1); arenaRecordDef.setUserName(user.getPlayerInfoManager().getNickName()); arenaRecordDef.setId(String.valueOf(id)); arenaRecordDef.setPracticeLevel(user.getHeroManager().getPracticeLevel()); - //arenaRecord.setPracticeLevel(user.getHeroManager().getPracticeLevel());//修行等级 TODO arenaRecordDef.setCreateTime(TimeUtils.nowInt()); String defarenaRecordJsonDef = new Gson().toJson(arenaRecordDef); redisUtil.lSet(key2, defarenaRecordJsonDef); //被抢占 给在线的被抢占玩家发红点 - ISession sess= OnlineUserManager.sessionMap.get(defUid); - if(sess!=null){ + ISession sess = OnlineUserManager.sessionMap.get(defUid); + if (sess != null) { ArenaInfoProto.CrossLingmaiIndicationResponse indication = ArenaInfoProto.CrossLingmaiIndicationResponse.newBuilder().build(); MessageUtil.sendIndicationMessage(sess, 1, MessageTypeProto.MessageType.CrossLingmaiIndicationResponse_VALUE, indication, true); } - - }else{ - //输记录 } //释放分布式锁 - redisUtil.del("SERVER_LINGMAI_LOCK"+ RedisKey.Delimiter_colon +crossGroup + RedisKey.Delimiter_colon + group); - } - MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true); + redisUtil.del("SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group); + } + PlayerLogic.getInstance().checkAndUpdate(user, request.getPrivilageTypeId(), 1); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaInfoHandler.java index 3081c6312..932c2d61d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaInfoHandler.java @@ -6,16 +6,15 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.GlobleSystemLogic; import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; -import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic; -import com.ljsd.jieling.logic.championship.ChampionshipLogic; +import com.ljsd.jieling.logic.arena.CrossLingmaiLogic; import com.ljsd.jieling.logic.dao.ArenaManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.cross.CSPlayer; -import com.ljsd.jieling.logic.dao.root.GuildCache; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.MessageUtil; import config.SLodeConfig; +import config.SMServerLodeSetting; import rpc.protocols.ArenaInfoProto; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; @@ -23,9 +22,7 @@ import util.TimeUtils; import java.util.List; import java.util.Map; -import java.util.stream.Collector; import java.util.stream.Collectors; -import config.SMServerLodeSetting; public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler { @@ -36,7 +33,7 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup+RedisKey.Delimiter_colon+group, String.class, LingMaiSecretArea.class); - if(page == 0){ - int id = lingMaiMap.values().stream().filter(n->n.getUid()==uid).mapToInt(n->n.getId()).sum(); - if(SLodeConfig.lodeConfig.get(id)!=null){ + Map lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class); + if (page == 0) { + int id = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).mapToInt(n -> n.getId()).sum(); + if (SLodeConfig.lodeConfig.get(id) != null) { page = SLodeConfig.lodeConfig.get(id).getPageNo(); - }else { + } else { //找到第一个未被占领的灵脉 - for(Map.Entry configEntry:SLodeConfig.lodeConfig.entrySet()){ - if(!lingMaiMap.containsKey(configEntry.getKey())){ + for (Map.Entry configEntry : SLodeConfig.lodeConfig.entrySet()) { + if (!lingMaiMap.containsKey(configEntry.getKey())) { page = SLodeConfig.lodeConfig.get(configEntry.getValue().getPageNo()).getPageNo(); break; } } } } - List pageConfig= SLodeConfig.getByGroupAndPageNo(group,page); - if(pageConfig==null){ + List pageConfig = SLodeConfig.getByGroupAndPageNo(group, page); + if (pageConfig == null) { MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true); return; } int myOccupyId = 0; int myOccupyTime = 0; //自己相关的 - List matchMyInfoList = lingMaiMap.values().stream().filter(n->n.getUid()==uid).collect(Collectors.toList()); - if(matchMyInfoList!=null&&matchMyInfoList.size()>0){ + List matchMyInfoList = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).collect(Collectors.toList()); + if (matchMyInfoList != null && matchMyInfoList.size() > 0) { myOccupyId = matchMyInfoList.get(0).getId(); - myOccupyTime = (int)matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime(); + myOccupyTime = (int) matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime(); } //当前页面数据 - for(SLodeConfig config:pageConfig){ - if(lingMaiMap.containsKey(String.valueOf(config.getId()))){ - CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(lingMaiMap.get(String.valueOf(config.getId())).getUid()); - CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder() - .setUid(lingMaiMap.get(String.valueOf(config.getId())).getUid()) - .setLevel(csPlayer.getLevel()) - .setName(csPlayer.getName()) - .setServername(lingMaiMap.get(String.valueOf(config.getId())).getServerName()) - .setTotalForce(csPlayer.getMaxFore()) //.setTotalForce(crossArenaManager.getTotalForce()) - .setUserTitle(csPlayer.getUserTitle()) - .setUserMount(csPlayer.getUserMount()) - .setGender(csPlayer.getSex()) - .setUserSkin(csPlayer.getSkin()) - .setPracticeLevel(csPlayer.getPracticeLevel()) - .setScore(csPlayer.getCrossYuxulundaoNewScore()) - .setHead(csPlayer.getHead()) - .setHeadFrame(csPlayer.getHeadFrame()) - .setLingmaiId(lingMaiMap.get(String.valueOf(config.getId())).getId()) - .build(); + for (SLodeConfig config : pageConfig) { + if (lingMaiMap.containsKey(String.valueOf(config.getId()))) { + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(lingMaiMap.get(String.valueOf(config.getId())).getUid()); + CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder() + .setUid(lingMaiMap.get(String.valueOf(config.getId())).getUid()) + .setLevel(csPlayer.getLevel()) + .setName(csPlayer.getName()) + .setServername(lingMaiMap.get(String.valueOf(config.getId())).getServerName()) + .setTotalForce(csPlayer.getMaxFore()) //.setTotalForce(crossArenaManager.getTotalForce()) + .setUserTitle(csPlayer.getUserTitle()) + .setUserMount(csPlayer.getUserMount()) + .setGender(csPlayer.getSex()) + .setUserSkin(csPlayer.getSkin()) + .setPracticeLevel(csPlayer.getPracticeLevel()) + .setScore(csPlayer.getCrossYuxulundaoNewScore()) + .setHead(csPlayer.getHead()) + .setHeadFrame(csPlayer.getHeadFrame()) + .setLingmaiId(lingMaiMap.get(String.valueOf(config.getId())).getId()) + .build(); - res.addLingmaiData(lingMaiSecret); - - }else{ - //没人占领 给机器人数据 - CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build(); - res.addLingmaiData(lingMaiSecret); - } + res.addLingmaiData(lingMaiSecret); + } else { + //没人占领 给机器人数据 + CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build(); + res.addLingmaiData(lingMaiSecret); + } } res.setMyOccupyId(myOccupyId); res.setMyOccupyTime(myOccupyTime); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaRecordHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaRecordHandler.java index 87e805a86..52daea042 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaRecordHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/crossServer/CrossLingmaiSecretAreaRecordHandler.java @@ -25,7 +25,7 @@ public class CrossLingmaiSecretAreaRecordHandler extends BaseHandler list = redisUtil.lGet(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(uid), 0, -1); Collections.reverse(list); - if (list != null){ - for(String s:list){ + if (list != null) { + for (String s : list) { ArenaRecord arenaRecord = new Gson().fromJson(s, ArenaRecord.class); - CommonProto.LingMaiSecretRecord record = CommonProto.LingMaiSecretRecord.newBuilder().setType(arenaRecord.getType()) + CommonProto.LingMaiSecretRecord record = CommonProto.LingMaiSecretRecord.newBuilder().setType(arenaRecord.getType()) .setUserName(user.getPlayerInfoManager().getNickName()) .setDefName(arenaRecord.getUserName()).setLingMaiId(Integer.parseInt(arenaRecord.getId())) - .setTime(arenaRecord.getOccurTime()).setPracticeLevel(arenaRecord.getPracticeLevel()).build(); + .setTime(arenaRecord.getCreateTime()).setPracticeLevel(arenaRecord.getPracticeLevel()).build(); builder.addRecordData(record); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java index 7e1b8fc91..651e4e3e4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossLingmaiLogic.java @@ -18,6 +18,8 @@ import com.ljsd.jieling.util.ItemUtil; import config.SErrorCodeEerverConfig; import config.SLodeConfig; import config.SLodeRankReward; +import config.SMServerLodeSetting; +import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import util.StringUtil; @@ -46,6 +48,32 @@ public class CrossLingmaiLogic { } + //功能是否开启 关闭、休战 、战斗 + public void functionIsOpen(int [] result){ + SMServerLodeSetting setting = SMServerLodeSetting.lodeConfig.get(1); + int[][]restTime = setting.getRestTime(); + int[][]battleTime = setting.getBattleTime(); + long mondayZeroTime = TimeUtils.getWeekZero(1); + //休战期 + for(int [] everyTime:restTime){ + if(TimeUtils.now()>=mondayZeroTime+everyTime[0]*1000 && TimeUtils.now()<=mondayZeroTime+everyTime[1]*1000){ + result[0]=2; + result[1]=(int)(mondayZeroTime/1000)+everyTime[1]; + return; + } + } + //抢夺期 + for(int [] everyTime:battleTime){ + if(TimeUtils.now()>mondayZeroTime+everyTime[0]*1000 && TimeUtils.now() lingMaiMap){ for (Map.Entry data :lingMaiMap.entrySet()){ if(data.getValue().getUid()==uid){ @@ -76,16 +104,14 @@ public class CrossLingmaiLogic { if(config!=null){ int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime(); int difVal = (nowTime-occupyTime)/60>=10?10:(nowTime-occupyTime)/60; - difVal =1 ; + //difVal =1 ; map.getValue().setOccupyTime(map.getValue().getOccupyTime()+difVal); map.getValue().setGetAwardTimeOrOccupyTime(TimeUtils.nowInt()); - LOGGER.error("玩家"+map.getValue().getUid()+"获得"+difVal); - RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, map.getKey(),map.getValue()); AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType()); - int score =map.getValue().getOccupyTime()*1+map.getValue().getScore1();//TODO 乘以每分钟收益 + int score =map.getValue().getOccupyTime()*config.getRewardList()[0][1]+map.getValue().getScore1(); double test =rank.getScoreById(user.getId(),crossGroup + RedisKey.Delimiter_colon + group); LOGGER.error("之前是:"+test +"之后是:"+score); rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score); @@ -119,16 +145,18 @@ public class CrossLingmaiLogic { if (crossGroup == -1){ return; } - String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"1"); - String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"2"); + String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+ RedisKey.Delimiter_colon +"1"); + String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+ RedisKey.Delimiter_colon +"2"); Set arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey1, 0, -1); Set arenaRank2= RedisUtil.getInstence().getReverseZset(rkey2, 0, -1); sendMailReward(arenaRank1); sendMailReward(arenaRank2); + RedisUtil.getInstence().del(rkey1); + RedisUtil.getInstence().del(rkey2); } public void sendMailReward(Set arenaRank){ - List arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).filter(n -> n > 1000).boxed().collect(Collectors.toList()); + List arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).boxed().collect(Collectors.toList()); String title = SErrorCodeEerverConfig.getI18NMessage("LingmaiReward_mail_title"); for(int i=0;i9&&hour<21){ - int mod = minute%2; + int mod = minute%10; if(mod ==0 ){ CrossLingmaiLogic.getInstance().sendOccypyReward(); } @@ -326,7 +326,7 @@ public class MinuteTask extends Thread { //结算每日排行奖励 if(hour ==21 && minute==0){ //删除数据 TODO - CrossLingmaiLogic.getInstance().sendOccypyReward(); + CrossLingmaiLogic.getInstance().sendMailReward(); } }