From 7ab321cc75a28d7b68d7fa1993a4cd0637d919ea Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 14 Oct 2021 15:36:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E5=B0=B1=E4=BB=BB=E5=8A=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E5=85=BC=E5=AE=B9=E5=BC=80=E6=9C=8D=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 4 +-- .../jieling/logic/activity/ActivityLogic.java | 30 +++++++++++++----- .../logic/activity/CowFlySkyActivity.java | 8 ++--- .../ljsd/jieling/logic/hero/HeroLogic.java | 2 +- .../jieling/logic/mission/MissionLoigc.java | 31 +++++++++++++++++++ .../main/java/config/SAchievementConfig.java | 6 ++++ 6 files changed, 66 insertions(+), 15 deletions(-) diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 9657185bc..02eab8b6e 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -110,7 +110,7 @@ public class TimeUtils { /** * 年月日 时分秒, 格式如: 20110111011059 */ - private static final String ymdhmsFormat_new = "yyyyMMddHHmmss"; + public static final String ymdhmsFormat_new = "yyyyMMddHHmmss"; /** * 年月日 时分, 格式如: 2011-01-11 01:10 */ @@ -123,7 +123,7 @@ public class TimeUtils { /** * 年月日,格式如19700710 */ - private static final String ymdFormat = "yyyyMMdd"; + public static final String ymdFormat = "yyyyMMdd"; /** * 年月日,格式如1970年07月10日 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index 6a3bbae2e..48ff9d1dd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -169,28 +169,42 @@ public class ActivityLogic implements IEventHandler{ } if(time == ActivityType.OPEN_TYPE_MONTHS){ //now = 当前是开服第几个月 - //开服日期 - String openTime = GameApplication.serverConfig.getOpenTime().split(" ")[0]; - String nowTime = TimeUtils.getTimeStampYMDnew(TimeUtils.now()); - //now = TimeUtils.getGapMonthsByTwoTime(openTime, nowTime)+1; } long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 1); long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2); long gapEndTime = endTime+sGlobalActivity.getGapTime()*TimeUtils.DAY; if (now < startTime) { //如果没到活动开启时间,但是openActivityIds里有了这个活动,证明是热更延迟开启的活动,需要清除掉 - if (openActivityIds.contains(sGlobalActivity.getId())) { - openActivityIds.remove(sGlobalActivity.getId()); - } + openActivityIds.remove(sGlobalActivity.getId()); continue; } int[] ifOpen = sGlobalActivity.getIfOpen(); + // 开服条件判断 if(ifOpen!=null && ifOpen.length>0){ - if(ifOpen[0]==2){ //开服 + //开服多少天不会出现 + if(ifOpen[0]==2){ if(GameApplication.serverConfig.getCacheOpenTime() + ifOpen[1]*TimeUtils.ONE_DAY >TimeUtils.now()){ continue; } } + // 在某某时间之前开服不会出现 + if (ifOpen[0] == 3){ + long toMiles = TimeUtils.stringToTimeLong(String.valueOf(ifOpen[1]), TimeUtils.ymdFormat); + long openTime = GameApplication.serverConfig.getCacheOpenTime(); + if (toMiles < openTime){ + openActivityIds.remove(sGlobalActivity.getId()); + continue; + } + } + // 在某某时间之后开服不会出现 + if (ifOpen[0] == 4){ + long toMiles = TimeUtils.stringToTimeLong(String.valueOf(ifOpen[1]), TimeUtils.ymdFormat); + long openTime = GameApplication.serverConfig.getCacheOpenTime(); + if (toMiles > openTime){ + openActivityIds.remove(sGlobalActivity.getId()); + continue; + } + } } if (endTime != 0 && now > endTime) { if (!openActivityIds.contains(sGlobalActivity.getId())) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java index e57ffa285..e563a2b61 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java @@ -12,20 +12,20 @@ import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; -import com.ljsd.jieling.logic.mission.main.CowFlySkyMissionType; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; import config.SActivityRewardConfig; -import config.SArroGantFly; import config.SErrorCodeEerverConfig; import config.SGlobalActivity; -import manager.STableManager; import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; import util.TimeUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; public class CowFlySkyActivity extends AbstractActivity { 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 ba8203505..af58bc129 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 @@ -2262,7 +2262,7 @@ public class HeroLogic{ if (!bookEnabled.isEmpty()){ Map config = STableManager.getConfig(SSpiritAnimalBook.class); for(int bootId:bookEnabled){ - int[][] activePara = config.get(bootId).getActivePara(); + int[][] activePara = Optional.ofNullable(config.get(bootId)).map(SSpiritAnimalBook::getActivePara).orElse(new int[0][]); combinedAttribute(activePara,heroAllAttribute); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 4053d045d..045929088 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -26,6 +26,7 @@ import com.ljsd.jieling.logic.mission.data.BaseDataManager; import com.ljsd.jieling.logic.mission.data.DataManagerDistributor; import com.ljsd.jieling.logic.mission.main.*; import com.ljsd.jieling.network.session.ISession; +import org.luaj.vm2.ast.Str; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; @@ -60,10 +61,40 @@ public class MissionLoigc { getCowFlySkyMission(user,missionList); getEndlessMission(user,missionList); getMistyTripMission(user,missionList); + // 此方法必须放在最后,对所有获取到的任务进行处理 + checkMissionTime(missionList); PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true); } + /** + * 兼容,校验成就时间 + * @param missionList + */ + private static void checkMissionTime(List missionList){ + // 配置表 + Map config = STableManager.getConfig(SAchievementConfig.class); + // 玩家当前任务 + Iterator iterator = missionList.iterator(); + // 开服时间 + long cacheOpenTime = GameApplication.serverConfig.getCacheOpenTime(); + // 遍历 + while (iterator.hasNext()){ + CommonProto.UserMissionInfo next = iterator.next(); + SAchievementConfig achievementConfig = config.get(next.getMissionId()); + // 配置表不存在的成就,可能删除了,代码去除 + if (achievementConfig == null){ + iterator.remove(); + continue; + } + long time = TimeUtils.stringToTimeLong(String.valueOf(achievementConfig.getEffectData()), TimeUtils.ymdFormat); + // 表中配置的,time之前开服的不显示改任务 + if (cacheOpenTime < time){ + iterator.remove(); + } + } + } + private static void getBloodyMisison(User user, List missionList){ UserMissionManager userMissionManager = user.getUserMissionManager(); BloodyMissionIdsType bloodyMissionIdsType = userMissionManager.getBloodyMissionIdsType(); diff --git a/tablemanager/src/main/java/config/SAchievementConfig.java b/tablemanager/src/main/java/config/SAchievementConfig.java index 51e9f1d63..013d7d24a 100644 --- a/tablemanager/src/main/java/config/SAchievementConfig.java +++ b/tablemanager/src/main/java/config/SAchievementConfig.java @@ -16,6 +16,8 @@ public class SAchievementConfig implements BaseConfig { private int[][] reward; + private int effectData; + public static Map> setTMap; public static Map> sTaskConfigByTypeMap; @Override @@ -49,6 +51,10 @@ public class SAchievementConfig implements BaseConfig { return reward; } + public int getEffectData() { + return effectData; + } + public static Map> getsTaskConfigByTypeMap() { return sTaskConfigByTypeMap; }