diff --git a/conf/hotfix.json b/conf/hotfix.json index 2e5c7ac7a..b8eeab13c 100644 --- a/conf/hotfix.json +++ b/conf/hotfix.json @@ -1,5 +1,4 @@ { "version":"5", - "classes":[ - ] + "classes":[] } \ No newline at end of file diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 112723997..8d4faa187 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -415,6 +415,9 @@ public class TimeUtils { return calendar.getTimeInMillis(); } + /** + * 获取指定时间的当天0点 + */ public static long getAppointTimeInXDay(long date, int hour) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(date); @@ -898,6 +901,45 @@ public class TimeUtils { return getTomorrowZero() - now(); } + /** + * 给定三个时间,一个开始时间,一个间隔时间,一个当前时间 + * 计算距离当前时间最近的开始时间,两个开始时间需间隔一个间隔时间 + * @param startTimeMillis 开始时间 + * @param currentMillis 当前时间 + * @param intervalMillis 间隔时间 + * @return 最近得开始时间 + */ + public static long getLatelyTime(long startTimeMillis, long intervalMillis, long currentMillis){ + return startTimeMillis + (currentMillis - startTimeMillis) / intervalMillis * intervalMillis; + } + + /** + * 计算距离当前时间最近的开始时间 + * + * @param startTime 开始时间的时间戳(毫秒) + * @param interval 间隔时间(毫秒) + * @param currentTime 当前时间的时间戳(毫秒) + * @return 最近的开始时间的时间戳(毫秒) + */ + public static long calculateNextStartTime(long startTime, long interval, long currentTime) { + // 计算从开始时间到当前时间的差异 + long timeDiff = currentTime - startTime; + + // 计算间隔时间的完整倍数 + long intervalCount = timeDiff / interval; + + // 计算距离当前时间最近的开始时间 + long nextStartTime = startTime + interval * intervalCount; + + // 如果计算出的时间小于或等于当前时间,则选择下一个开始时间 + if (nextStartTime <= currentTime) { + nextStartTime += interval; + } + + return nextStartTime; + } + + /** * 计算当前时间距离下周零点的时间,单位/毫秒 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java index 99d1f1491..0bdb6ef84 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java @@ -2,18 +2,12 @@ package com.ljsd.jieling.config.clazzStaticCfg; import com.ljsd.GameApplication; import com.ljsd.jieling.globals.Global; -import com.ljsd.jieling.logic.dao.ExpeditionItem; -import com.ljsd.jieling.logic.dao.Hero; -import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.logic.family.GuildFightLogic; -import com.ljsd.jieling.logic.hero.HeroLogic; import config.*; import manager.AbstractClassStaticConfig; import manager.STableManager; import manager.Table; -import util.TimeUtils; -import util.CellUtil; import util.MathUtils; +import util.TimeUtils; import java.util.*; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/EquipUpLevelHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/EquipUpLevelHandler.java index 59777675b..7f0361beb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/EquipUpLevelHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/EquipUpLevelHandler.java @@ -16,8 +16,6 @@ public class EquipUpLevelHandler extends BaseHandler itemArrs = new LinkedList<>(); getAllMissRewards(user, session, itemArrs); - if (itemArrs.size() == 0) { + if (itemArrs.isEmpty()) { return; } SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); 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 c3fc44b83..333a77925 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 @@ -168,66 +168,71 @@ public class ActivityLogic implements IEventHandler{ //检查开启的活动 非相对创角时间 for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { + int id = sGlobalActivity.getId(); int time = sGlobalActivity.getTime(); - ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); + int type = sGlobalActivity.getType(); + long startTimeLong = sGlobalActivity.getStartTimeLong(); + long endTimeLong = sGlobalActivity.getEndTimeLong(); + int cycleMinute = sGlobalActivity.getCycleMinute(); + + AbstractActivity activity = ActivityTypeEnum.getActicityById(id); if (time == ActivityType.OPEN_TYPE_ROLE) { + // 创角时间活动 continue; } - if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ continue; } - 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 startTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time,0, 1, cycleMinute); + long endTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time,0, 2, cycleMinute); if (now < startTime) { //如果没到活动开启时间,但是openActivityIds里有了这个活动,证明是热更延迟开启的活动,需要清除掉 - openActivityIds.remove(sGlobalActivity.getId()); + openActivityIds.remove(id); continue; } // 开服条件判断 - boolean open = SGlobalActivity.checkActivityIfOpen(sGlobalActivity.getId(),0,GameApplication.serverConfig.getCacheOpenTime()); + boolean open = SGlobalActivity.checkActivityIfOpen(id,0,GameApplication.serverConfig.getCacheOpenTime()); if (!open){ - openActivityIds.remove(sGlobalActivity.getId()); + openActivityIds.remove(id); continue; } - long gapEndTime = endTime+sGlobalActivity.getGapTime()*TimeUtils.DAY; + long gapEndTime = endTime + sGlobalActivity.getGapTime() * TimeUtils.DAY; if (endTime != 0 && now > endTime) { - if (!openActivityIds.contains(sGlobalActivity.getId())) { - if(nowgapEndTime){ - openActivityIds.remove(sGlobalActivity.getId()); + if(now > gapEndTime){ + openActivityIds.remove(id); } - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); - if (null == abstractActivity) { + if (null == activity) { continue; } //活動結束 預約的展示期間 - if(now activityPreMap = globalSystemControl.getActivityPreEnd(); - if(activityPreMap.containsKey(sGlobalActivity.getId())){ - if(activityPreMap.get(sGlobalActivity.getId())>=endTime && activityPreMap.get(sGlobalActivity.getId())<=gapEndTime){ + if(activityPreMap.containsKey(id)){ + if(activityPreMap.get(id)>=endTime && activityPreMap.get(id)<=gapEndTime){ continue; } } - abstractActivity.onActivityPreEnd(); + activity.onActivityPreEnd(); continue; } - abstractActivity.onActivityEnd(); + activity.onActivityEnd(); continue; } - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); - if (null == abstractActivity) { + if (null == activity) { continue; } - if(openActivityIds.contains(sGlobalActivity.getId())) { + if(openActivityIds.contains(id)) { continue; } - abstractActivity.onActivityStart(); - openActivityIds.add(sGlobalActivity.getId()); + activity.onActivityStart(); + openActivityIds.add(id); } //活动数据处理分发到角色线程 InnerMessageUtil.broadcastWithRandom(user1 -> { @@ -270,6 +275,7 @@ public class ActivityLogic implements IEventHandler{ }, new LinkedList<>(OnlineUserManager.sessionMap.keySet()),2); } + public void newPlayerOpenActivityMission(User user) throws Exception { checkActivityOfUser(user, null); ISession session = OnlineUserManager.getSessionByUid(user.getId()); @@ -321,7 +327,7 @@ public class ActivityLogic implements IEventHandler{ ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); activityProgressInfo.setProgrss(0); activityProgressInfo.setState(0); - activityMission.getActivityMissionMap().put(missionId, activityProgressInfo); + activityMission.getActivityMissionMap().put(missionId, activityProgressInfo); } activityMission.setOpenType(1); activityMission.setV(0); @@ -355,40 +361,16 @@ public class ActivityLogic implements IEventHandler{ LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId); continue; } + //多少天内不会出现 创角判断 int[] ifOpen = sGlobalActivity.getIfOpen(); - //创角 if(ifOpen!=null && ifOpen.length>0 && ifOpen[0]==1){ - if(userCreateTime + ifOpen[1]*TimeUtils.ONE_DAY > now){ + if(userCreateTime + ifOpen[1] * TimeUtils.ONE_DAY > now){ continue; } } ActivityMission activityMission = activityManager.getActivityMissionMap().get(openActivityId); if (activityMission != null) { - if(openActivityId == ActivityType.RechargeTotal){ - //首冲3天 -> 7天 容错 - int chargeMoneyCount = 0; - List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(openActivityId); - if(sActivityRewardConfigs.size() != activityMission.getActivityMissionMap().size()){ - for(ActivityProgressInfo progressInfo:activityMission.getActivityMissionMap().values()){ - if(chargeMoneyCount != progressInfo.getProgrss()){ - chargeMoneyCount = progressInfo.getProgrss(); - } - } - } - for (SActivityRewardConfig config:sActivityRewardConfigs) { - if(!activityMission.getActivityMissionMap().containsKey(config.getId())){ - if(activityMission.getActivityState()==2){ - activityMission.setActivityState(1); - } - ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); - activityProgressInfo.setProgrss(ActivityLogic.getInstance().getInitActivityMissionProgress(openActivityId)); - activityProgressInfo.setState(0); - activityProgressInfo.setProgrss(chargeMoneyCount); - activityMission.getActivityMissionMap().put(config.getId(), activityProgressInfo); - } - } - } - // 登录检测已开启的活动,商店是否开启 + // 商店初始化 int[] shopId = sGlobalActivity.getShopId(); if (shopId != null && shopId.length > 0 && shopId[0] != 0) { boolean b = user.getStoreManager().getStoreInfoMap().containsKey(shopId[0]); @@ -397,19 +379,15 @@ public class ActivityLogic implements IEventHandler{ Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1)); } } + // 循环活动初始化 + int time = sGlobalActivity.getTime(); + if (time == ActivityType.OPEN_TYPE_CYCLE){ + refreshCycleActivity(user, sGlobalActivity, builder); + } continue; } - initAllActivityMission(activityManager.getActivityMissionMap(),openActivityId); - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(openActivityId); - if (null==abstractActivity) { - continue; - } - - abstractActivity.initActivity(user); -// ReportUtil.onReportEvent(user, ReportEventEnum.JOIN_ACTIVITY.getType(),String.valueOf(openActivityId)); - int activityOpenState = getActivityOpenState(user, openActivityId); - abstractActivity.setOpenState(user,activityOpenState); - if(activityOpenState == ActivityType.UNOPEN_STATE){ + boolean checked = checkStateAndInitFromActivity(user, openActivityId); + if (checked){ continue; } //非角色活动开启通知 @@ -417,7 +395,19 @@ public class ActivityLogic implements IEventHandler{ } Map activityMissionMap = activityManager.getActivityMissionMap(); for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { - if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + + long startTimeLong = sGlobalActivity.getStartTimeLong(); + long endTimeLong = sGlobalActivity.getEndTimeLong(); + int time = sGlobalActivity.getTime(); + int gapTime = sGlobalActivity.getGapTime(); + int type = sGlobalActivity.getType(); + int cycleMinute = sGlobalActivity.getCycleMinute(); + + long startTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time, userCreateTime, 1, cycleMinute); + long endTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time, userCreateTime, 2, cycleMinute); + long gepTimeLong = endTime + gapTime * TimeUtils.ONE_DAY; + + if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ continue; } int activityId = sGlobalActivity.getId(); @@ -444,73 +434,100 @@ public class ActivityLogic implements IEventHandler{ } } else if (activityMissionMap.containsKey(activityId)) { //如果活动没有开启,但是玩家有这个活动的数据,则清除,并通知客户端活动关闭 - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 1); - if(TimeUtils.now() < startTime){ - LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId,sGlobalActivity.getType(),sGlobalActivity.getStartTimeLong()); + if(now < startTime){ + LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId, type, startTimeLong); activityMissionMap.remove(activityId); if (builder != null) { builder.addCloseActivityId(activityId); } } } - int time = sGlobalActivity.getTime(); - if (time == ActivityType.OPEN_TYPE_ROLE) { - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 1); - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 2); + boolean isRemove = now > gepTimeLong; + if (time == ActivityType.OPEN_TYPE_ROLE) {//创角 if (now < startTime) { continue; } if (endTime != 0 && now > endTime) { - goRewardActivity(user,activityId,builder,now>endTime+sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY); + goRewardActivity(user,activityId,builder, isRemove); continue; } - ActivityMission activityMission = activityMissionMap.get(activityId); - if (activityMission != null) { - continue; - } - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); - if (null==abstractActivity) { - continue; - } -// ReportUtil.onReportEvent(user, ReportEventEnum.JOIN_ACTIVITY.getType(),String.valueOf(activityId)); - abstractActivity.initActivity(user); -// if(!initOtherActivity(user, sGlobalActivity)){ - initAllActivityMission(activityManager.getActivityMissionMap(),activityId); -// - int activityOpenState = getActivityOpenState(user, activityId ); - abstractActivity.setOpenState(user,activityOpenState); - if(activityOpenState == ActivityType.UNOPEN_STATE){ + boolean checked = checkStateAndInitFromActivity(user, activityId); + if (checked){ continue; } openNewActivityIds.add(activityId); - - } else { - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 2); - goRewardActivity(user,activityId,builder,now>endTime + sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY); + } + else { + goRewardActivity(user, activityId, builder, isRemove); } } return openNewActivityIds; - } + + /** + * 刷新循环活动 + * @param user 玩家 + * @param activity 活动 + * @param builder 返回roto + * @throws Exception 异常 + */ + public void refreshCycleActivity(User user, SGlobalActivity activity, PlayerInfoProto.ActivityUpateIndication.Builder builder) throws Exception { + ActivityManager activityManager = user.getActivityManager(); + int activityId = activity.getId(); + long now = TimeUtils.now(); + long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(), activity.getEndTimeLong(), activity.getTime(), 0, 1, activity.getCycleMinute()); + long endTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(), activity.getEndTimeLong(), activity.getTime(), 0, 2, activity.getCycleMinute()); + // 当前期活动未开始 + if (now < startTime || now > endTime) { + return; + } + ActivityMission mission = activityManager.getActivityMissionMap().get(activityId); + // 活动存在,(当前时间大于最近的结束时间 或 活动创建时间大于最近得开启时间),表示当期活动结束 + if (mission.getCreatTime() < startTime){ + goRewardActivity(user, activityId, builder, true); + checkStateAndInitFromActivity(user, activityId); + } + } + + /** + * 初始化活动并校验活动状态是否开启 + * @return true 未开启, false 开启 + */ + private boolean checkStateAndInitFromActivity(User user, int activityId) throws Exception { + ActivityManager activityManager = user.getActivityManager(); + initAllActivityMission(activityManager.getActivityMissionMap(),activityId); + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); + if (null == abstractActivity) { + return true; + } + abstractActivity.initActivity(user); + int activityOpenState = getActivityOpenState(user, activityId); + abstractActivity.setOpenState(user,activityOpenState); + return activityOpenState == ActivityType.UNOPEN_STATE; + } + + /** + * 活动结束,(存在发奖操作,看配置)删除活动 + */ private static void goRewardActivity(User user,int activityId,PlayerInfoProto.ActivityUpateIndication.Builder builder,boolean isRemoveInfo) throws Exception { ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); - if (activityMission != null) { - AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); - if (null==abstractActivity) { - return; - } - if(activityMission.getOpenType()!=ActivityType.CLOSE_STATE){ - abstractActivity.onActivityEndSelfWithDealReward(user); - abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE); - Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE)); - } - - if(isRemoveInfo){ - user.getActivityManager().getActivityMissionMap().remove(activityId); - LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); - if (builder != null) { - builder.addCloseActivityId(activityId); - } + if (activityMission == null) { + return; + } + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); + if (null == abstractActivity) { + return; + } + if(activityMission.getOpenType() != ActivityType.CLOSE_STATE){ + abstractActivity.onActivityEndSelfWithDealReward(user); + abstractActivity.setOpenState(user,ActivityType.CLOSE_STATE); + Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),activityId,ActivityType.CLOSE_STATE)); + } + if(isRemoveInfo){ + user.getActivityManager().getActivityMissionMap().remove(activityId); + LOGGER.info("the uid={},remove the activity id ={}", user.getId(), activityId); + if (builder != null) { + builder.addCloseActivityId(activityId); } } } @@ -577,15 +594,16 @@ public class ActivityLogic implements IEventHandler{ if(sGlobalActivity == null){ continue; } - ///旧版积天豪礼数据兼容 - if (sGlobalActivity.getType()==ActivityType.RECHARGE_SUM_DAY){ - if (activityMissionMap.get(activityId).getV()<=0||activityMissionMap.get(activityId).getV()>=15) { - continue; - } - } + + long startTimeLong = sGlobalActivity.getStartTimeLong(); + long endTimeLong = sGlobalActivity.getEndTimeLong(); + int timeType = sGlobalActivity.getTime(); + int type = sGlobalActivity.getType(); + int gapTime = sGlobalActivity.getGapTime(); + int cycleMinute = sGlobalActivity.getCycleMinute(); if(activityStatus == ActivityType.CLOSE_STATE){ - long prepareTime = ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, sGlobalActivity.getGapTime()); + long prepareTime = ToolsUtil.getEndTimeLong(startTimeLong, endTimeLong, timeType,0, gapTime); activityInfoList.add(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).setEndTime((int)(prepareTime/1000)).build()); continue; } @@ -609,24 +627,22 @@ public class ActivityLogic implements IEventHandler{ if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) { continue; } - int startTime,endTime; - if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ - startTime=(int)(activityState.getValue().getCreatTime()/1000); + int startTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 1, cycleMinute) / 1000); + int endTime = (int) (ToolsUtil.getTimeLong(startTimeLong, endTimeLong, timeType,createTime, 2, cycleMinute) / 1000); + + if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){ // 每日特惠活动 + startTime = (int)(activityState.getValue().getCreatTime()/1000); endTime = startTime+604800; - }else{ - startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); - if(sGlobalActivity.getGapTime()!=0){ - endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000); - }else{ - endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); - } + } + else{ + endTime = endTime + (int) (TimeUtils.DAY * gapTime / 1000); } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); if(abstractActivity==null){ LOGGER.error(sGlobalActivity.getId()+":活动类型不存在"); continue; } - List missionInfos =abstractActivity.getAllMissInfo(user,activityMission); + List missionInfos = abstractActivity.getAllMissInfo(user,activityMission); CommonProto.ActivityInfo build = CommonProto.ActivityInfo.newBuilder() .setActivityId(activityId) .addAllMission(missionInfos) @@ -799,8 +815,8 @@ public class ActivityLogic implements IEventHandler{ } long createTime = user.getPlayerInfoManager().getCreateTime(); - int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); - int endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); + int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1, sGlobalActivity.getCycleMinute()) / 1000); + int endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2, sGlobalActivity.getCycleMinute()) / 1000); List missionInfos = abstractActivity.getAllMissInfo(user,activityMission); fBuilder.addActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build()); fBuilder.setHadLuckTime(user.getPlayerInfoManager().getLuckWheelLimitTime()); @@ -1401,9 +1417,9 @@ public class ActivityLogic implements IEventHandler{ if(sGlobalActivities.isEmpty()){ throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); } - Function function = v->(int)ToolsUtil.getTimeLong(v.getStartTimeLong(),v.getEndTimeLong(),v.getTime(),user.getPlayerInfoManager().getCreateTime(),1); + Function function = v->(int)ToolsUtil.getTimeLong(v.getStartTimeLong(),v.getEndTimeLong(),v.getTime(),user.getPlayerInfoManager().getCreateTime(),1, v.getCycleMinute()); Stream stream = sGlobalActivities.stream().sorted(Comparator.comparing(function)) - .filter(v->ToolsUtil.getTimeLong(v.getStartTimeLong(), v.getEndTimeLong(), v.getTime(), user.getPlayerInfoManager().getCreateTime(), 1) > TimeUtils.now()); + .filter(v->ToolsUtil.getTimeLong(v.getStartTimeLong(), v.getEndTimeLong(), v.getTime(), user.getPlayerInfoManager().getCreateTime(), 1, v.getCycleMinute()) > TimeUtils.now()); List collect = stream.collect(Collectors.toList()); if(collect.isEmpty()){ throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); @@ -1413,7 +1429,7 @@ public class ActivityLogic implements IEventHandler{ if(sGlobalActivity==null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(),1); + long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(),1, sGlobalActivity.getCycleMinute()); PlayerInfoProto.NextActivityResponse response = PlayerInfoProto.NextActivityResponse.newBuilder().setId(id).setTime((int)(startTime/1000)).build(); MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); @@ -1577,13 +1593,9 @@ public class ActivityLogic implements IEventHandler{ public static long[] getStartAndEndTime(User user,int activityId){ SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); - long createUserTime = 0; - if (sGlobalActivity.getTime() == ActivityType.OPEN_TYPE_ROLE) { - createUserTime = user.getPlayerInfoManager().getCreateTime(); - } long[] result = new long[2]; - result[0] = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createUserTime, 1); - result[1] = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createUserTime, 2); + result[0] = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1, sGlobalActivity.getCycleMinute()); + result[1] = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2, sGlobalActivity.getCycleMinute()); return result; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index 47cc70bad..8ec885e4a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -11,8 +11,8 @@ public interface ActivityType { int OPEN_TYPE_TIME = 1; // 活动开启类型:绝对时间 int OPEN_TYPE_ROLE = 2; // 活动开启类型:创角时间 int OPEN_TYPE_SERVER = 3; // 活动开启类型:开服时间 - - int OPEN_TYPE_MONTHS = 5 ; // 活动开启类型:开服自然月 + int OPEN_TYPE_MONTHS = 5; // 活动开启类型:开服自然月 + int OPEN_TYPE_CYCLE = 6; // 活动开启类型:循环活动 int WILL_TAKE = 0; //未领取 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ContinuousGiftActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ContinuousGiftActivity.java index 277dcc791..163b36c6b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ContinuousGiftActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ContinuousGiftActivity.java @@ -1,6 +1,5 @@ package com.ljsd.jieling.logic.activity; -import com.ljsd.GameApplication; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; import com.ljsd.jieling.logic.OnlineUserManager; @@ -14,7 +13,11 @@ import com.ljsd.jieling.logic.store.BuyGoodsNewLogic; import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag; import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler; import com.ljsd.jieling.network.session.ISession; -import config.*; +import com.ljsd.jieling.util.ToolsUtil; +import config.SGlobalActivity; +import config.SGoodsConfig; +import config.SRechargeCommodityNewConfig; +import config.SThemeActivityShop; import manager.STableManager; import rpc.protocols.CommonProto; import util.TimeUtils; @@ -49,6 +52,7 @@ public class ContinuousGiftActivity extends AbstractActivity { // 初始化阶段奖励 ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); user.getActivityManager().getActivityMissionMap().put(id, mission); + LOGGER.info("连续礼包活动初始化..."+id); } @Override @@ -74,7 +78,7 @@ public class ContinuousGiftActivity extends AbstractActivity { * @param giftId * @param missionMap */ - private void giftHandle(User user, int giftId, int giftNum, int type){ + public void giftHandle(User user, int giftId, int giftNum, int type){ if (giftId < 0 || giftNum <= 0){ // 非礼包处理 return; @@ -172,16 +176,18 @@ public class ContinuousGiftActivity extends AbstractActivity { @Override public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { - long now = TimeUtils.now(); - long start = getSrartTime(); - long end = getEndTime(); - // 验证活动是否开启 - if (now < start || now > end){ - return new ArrayList<>(); - } if (activityMission == null){ + LOGGER.error("活动不存在数据库中,id:{},uid:{}",id,user.getId()); return new ArrayList<>(); } + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (activity == null){ + LOGGER.error("活动不存在数据表中,id:{}",id); + return new ArrayList<>(); + } + long now = TimeUtils.now(); + long createTime = user.getPlayerInfoManager().getCreateTime(); + long start = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute()); // 更新记录天数 activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1); // 库里存储的活动档位信息 @@ -240,53 +246,13 @@ public class ContinuousGiftActivity extends AbstractActivity { return true; } - /** - * 开始时间 - * @return - */ - public long getSrartTime(){ - long startTime = 0; - SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); - // 绝对时间 - if (activity.getTime() == ActivityType.OPEN_TYPE_TIME){ - startTime = activity.getStartTimeLong(); - } - // 开服时间 - else if (activity.getTime() == ActivityType.OPEN_TYPE_SERVER) { - String openTime = GameApplication.serverConfig.getOpenTime(); - long timeLong2 = TimeUtils.stringToTimeLong2(openTime); - startTime = timeLong2 + activity.getStartTimeLong() * 1000; - } - return startTime; - } - - /** - * 结束时间 - * @return - */ - public long getEndTime(){ - long endTime = 0; - SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); - // 绝对时间 - if (activity.getTime() == ActivityType.OPEN_TYPE_TIME){ - endTime = activity.getEndTimeLong(); - } - // 开服时间 - else if (activity.getTime() == ActivityType.OPEN_TYPE_SERVER) { - String openTime = GameApplication.serverConfig.getOpenTime(); - long timeLong2 = TimeUtils.stringToTimeLong2(openTime); - endTime = timeLong2 + activity.getEndTimeLong() * 1000; - } - return endTime; - } - /** * 验证前置礼包购买状态 * @param user * @param boxId * @return */ - private boolean checkBuyAgo(User user, int boxId){ + public boolean checkBuyAgo(User user, int boxId){ // 获取消息 Map missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); SThemeActivityShop themes = STableManager.getConfig(SThemeActivityShop.class).get(boxId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EquipUpLevelActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EquipUpLevelActivity.java index 45df5f18d..52840f57a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EquipUpLevelActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/EquipUpLevelActivity.java @@ -1,11 +1,25 @@ package com.ljsd.jieling.logic.activity; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; import config.SComposeActivity; +import config.SComposeBook; +import config.SLuxuryFund; +import manager.STableManager; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class EquipUpLevelActivity extends AbstractActivity { @@ -16,22 +30,58 @@ public class EquipUpLevelActivity extends AbstractActivity { @Override public void initActivity(User user) throws Exception { ActivityMission mission = new ActivityMission(); - Map> configMap = SComposeActivity.getConfigMap(); - Map useTypeMap = new HashMap<>(); - for(Map.Entry entry : configMap.get(id).entrySet()){ - useTypeMap.put(entry.getValue().getId(),entry.getValue().getCount()); - } - for(Map.Entry entry : useTypeMap.entrySet()){ + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); + Map composeActivityMap = SComposeActivity.getConfigMap().get(id); + for (SComposeActivity composeActivity : composeActivityMap.values()) { ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); - activityProgressInfo.setProgrss(entry.getValue()); + activityProgressInfo.setProgrss(composeActivity.getCount()); activityProgressInfo.setState(0); - mission.getActivityMissionMap().put(entry.getKey(), activityProgressInfo); + mission.getActivityMissionMap().put(composeActivity.getId(), activityProgressInfo); } - mission.setOpenType(1); - mission.setV(0); - mission.setActivityState(ActivityType.OPEN_STATE); user.getActivityManager().getActivityMissionMap().put(id, mission); + LOGGER.info("云游商人初始化...uid={} activityId={}",user.getId(), id); } + /** + * 领取奖励 + * @param session 玩家缓存 + * @param equipId 装备id + * @return 道具 + * @throws Exception 异常 + */ + public CommonProto.Drop.Builder takeReward2(ISession session, int equipId) throws Exception { + User user = UserManager.getUser(session.getUid()); + Map config = STableManager.getConfig(SComposeBook.class); + SComposeBook composeBook = config.get(equipId); + if(composeBook == null){ + throw new ErrorCodeException(ErrorCode.CFG_NULL,"云游商人,idkey配置不存在:"+equipId); + } + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if(mission == null){ + LOGGER.error("misson为空,activityId:{}",id); + throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); + } + Map integerSComposeActivityMap = SComposeActivity.getConfigMap().get(id); + int typeId = integerSComposeActivityMap.get(composeBook.getType()).getId(); + ActivityProgressInfo progress = mission.getActivityMissionMap().get(typeId); + if(progress == null){ + LOGGER.error("progress为空,type:{}",composeBook.getType()); + throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); + } + if(progress.getProgrss() <= 0){ + LOGGER.error("progress次数不足,num:{}",progress.getProgrss()); + throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT); + } + boolean itemCost = ItemUtil.itemCost(user, new int[][]{composeBook.getNeedItems()[0],composeBook.getNeedCost()[0]}, BIReason.EQUIP_UPLEVEL_COST, equipId); + if(!itemCost){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + progress.setProgrss(progress.getProgrss()-1); + mission.getActivityMissionMap().put(typeId,progress); + CommonProto.Drop.Builder drop = ItemUtil.drop(user,new int[][]{composeBook.getGoalItems()[0]},BIReason.EQUIP_UPLEVEL_REWARD); + //发推送 + sendActivityProgress(user, null); + return drop; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FifteenActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FifteenActivity.java index 5d1980c6f..8230de1bb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FifteenActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FifteenActivity.java @@ -45,7 +45,7 @@ public class FifteenActivity extends AbstractActivity { if(activityMission == null){ return; } - long startTime = ToolsUtil.getTimeLong(globalActivity.getStartTimeLong(),globalActivity.getEndTimeLong(),globalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1); + long startTime = ToolsUtil.getTimeLong(globalActivity.getStartTimeLong(),globalActivity.getEndTimeLong(),globalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1, globalActivity.getCycleMinute()); int time = (int)(startTime/1000); Map progressInfoMap = activityMission.getActivityMissionMap(); for(Map.Entry entry : progressInfoMap.entrySet()){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FightMainEventHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FightMainEventHandler.java index 91bf3ebfa..6e3930799 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FightMainEventHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FightMainEventHandler.java @@ -50,8 +50,8 @@ public class FightMainEventHandler implements IEventHandler{ activityMission.setActivityState(ActivityType.OPEN_STATE); ActivityLogic.getInstance().sendActivityInfo(user,sGlobalActivity.getId()); if(sGlobalActivity.getShopId().length>0){ - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1); - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2); + long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1, sGlobalActivity.getCycleMinute()); + long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2, sGlobalActivity.getCycleMinute()); for (int shopId : sGlobalActivity.getShopId()) { ActivityLogic.getInstance().checkNeedOpenStore(user,shopId,startTime,endTime); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MissSearchExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MissSearchExpectRankActivity.java index ac9226e2a..a4e3b09de 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MissSearchExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MissSearchExpectRankActivity.java @@ -32,7 +32,7 @@ class MissSearchExpectRankActivity extends ExpectRankActivity { public void initActivity(User user) throws Exception { super.initActivity(user); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(), sGlobalActivity.getEndTimeLong(), sGlobalActivity.getTime(), 0, 2); + long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(), sGlobalActivity.getEndTimeLong(), sGlobalActivity.getTime(), 0, 2, sGlobalActivity.getCycleMinute()); user.getPlayerInfoManager().addVipByTime(155,(int)(endTime/1000)); Set vipInfo = new HashSet<>(); vipInfo.add(155); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewEightActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewEightActivity.java index 13f5aa1cd..419b3b6fc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewEightActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewEightActivity.java @@ -4,6 +4,7 @@ import com.ljsd.jieling.jbean.ActivityProgressInfo; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ToolsUtil; import config.SActivityRewardConfig; import config.SGlobalActivity; import util.TimeUtils; @@ -22,12 +23,10 @@ public class NewEightActivity extends AbstractActivity { @Override boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception { User user = UserManager.getUser(session.getUid()); - SGlobalActivity globalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - if (globalActivity.getTime()==1){ - return TimeUtils.getOverTimeCount(globalActivity.getStartTimeLong(), System.currentTimeMillis(), 0) >= sActivityRewardConfig.getValues()[0][0] - 1; - }else if (globalActivity.getTime()==2){ - return TimeUtils.getOverTimeCount(user.getPlayerInfoManager().getCreateTime(), System.currentTimeMillis(), 0) >= sActivityRewardConfig.getValues()[0][0] - 1; - } - return true; + long now = TimeUtils.now(); + long createTime = user.getPlayerInfoManager().getCreateTime(); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(), activity.getEndTimeLong(), activity.getTime(), createTime, 1, activity.getCycleMinute()); + return TimeUtils.getOverTimeCount(startTime, now, 0) >= sActivityRewardConfig.getValues()[0][0] - 1; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java index 2b5363c9f..ee857880b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java @@ -197,7 +197,7 @@ public class OpenServerCompeteRankActivity extends AbstractActivity { if (info == null || activity == null){ return 0; } - long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 1); + long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 1, activity.getCycleMinute()); long rankEndTime = startTime + info.getCloseTime()*1000L; return rankEndTime-TimeUtils.now(); } @@ -211,7 +211,7 @@ public class OpenServerCompeteRankActivity extends AbstractActivity { if (info == null || activity == null){ return false; } - long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 1); + long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 1, activity.getCycleMinute()); long rankStartTime = startTime + info.getOpenTime()*1000L; long rankEndTime = startTime + info.getCloseTime()*1000L; long now = TimeUtils.now(); @@ -229,7 +229,7 @@ public class OpenServerCompeteRankActivity extends AbstractActivity { if (info == null || activity == null){ return 0; } - int endTime = (int)(ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 2)/1000); + int endTime = (int)(ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 2, activity.getCycleMinute())/1000); return endTime-TimeUtils.nowInt(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/PowerRiceActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/PowerRiceActivity.java index a0bdaa40f..33bea10be 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/PowerRiceActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/PowerRiceActivity.java @@ -16,7 +16,6 @@ import com.ljsd.jieling.network.session.ISession; import config.SActivityRankingReward; import config.SActivityRewardConfig; import config.SErrorCodeEerverConfig; -import config.SGlobalActivity; import org.springframework.data.redis.core.ZSetOperations; import util.StringUtil; import util.TimeUtils; @@ -98,9 +97,8 @@ public class PowerRiceActivity extends AbstractActivity{ globalSystemControl.addActivityPreEnd(id,TimeUtils.now()); GlobalSystemControl.save(globalSystemControl); } - public List getRankReward() throws Exception{ - List sActivityRankingReward = SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id); - return sActivityRankingReward; + public List getRankReward() { + return SActivityRankingReward.getsActivityRankingRewardMapByActivityId(id); } /** @@ -108,15 +106,15 @@ public class PowerRiceActivity extends AbstractActivity{ * @param user * @return */ - public int getStage(User user){ - long []time = ActivityLogic.getStartAndEndTime(user,id); - SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - long gapTime = time[1] +sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY; - if(TimeUtils.now()>=time[0]&&TimeUtils.now()<=time[1]){ - return 0; - }else if(TimeUtils.now()>=time[1]&&TimeUtils.now()<=gapTime){ - return 1; - } - return -1; - } +// public int getStage(User user){ +// long []time = ActivityLogic.getStartAndEndTime(user,id); +// SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); +// long gapTime = time[1] +sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY; +// if(TimeUtils.now()>=time[0]&&TimeUtils.now()<=time[1]){ +// return 0; +// }else if(TimeUtils.now()>=time[1]&&TimeUtils.now()<=gapTime){ +// return 1; +// } +// return -1; +// } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SecretExpectRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SecretExpectRankActivity.java index fe07a5ce8..a003338e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SecretExpectRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SecretExpectRankActivity.java @@ -6,8 +6,6 @@ import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.SecretEvent; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; -import rpc.protocols.CommonProto; -import rpc.protocols.PlayerInfoProto; import com.ljsd.jieling.util.ToolsUtil; import config.SGlobalActivity; @@ -30,7 +28,7 @@ class SecretExpectRankActivity extends ExpectRankActivity { listValue.add(153);//额外购买次数 listValue.add(154);//额外免费次数 Set changedSet = new HashSet<>(); - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(), sGlobalActivity.getEndTimeLong(), sGlobalActivity.getTime(), 0, 2); + long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(), sGlobalActivity.getEndTimeLong(), sGlobalActivity.getTime(), 0, 2, sGlobalActivity.getCycleMinute()); int time = (int)(endTime / 1000); listValue.forEach(privilegeId -> { changedSet.add(privilegeId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SevenHappyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SevenHappyActivity.java index 31e579405..8b2f899bc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SevenHappyActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SevenHappyActivity.java @@ -25,7 +25,7 @@ public class SevenHappyActivity extends DefaultEmptyActivity{ user.getActivityManager().getActivityMissionMap().put(id, mission); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); user.getUserMissionManager().onGameEvent(user, GameEvent.SERVENHAPPY_REFRESH,id); - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1); + long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1, sGlobalActivity.getCycleMinute()); user.getActivityManager().setSenvenStartTime(startTime); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SubActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SubActivity.java index 6dad54b21..4f2259008 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SubActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SubActivity.java @@ -47,7 +47,11 @@ public class SubActivity extends AbstractActivity { if(null!=subRewardPoolInfo){ subRewardPoolInfo.setLay(0); } + ActivityMission mission = new ActivityMission(); + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); + user.getActivityManager().getActivityMissionMap().put(id, mission); randomReward(user, true); + LOGGER.info("易经宝库初始化...uid={} activityId={}",user.getId(), id); } @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java index 925234d0b..2c799076d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java @@ -1,6 +1,5 @@ package com.ljsd.jieling.logic.activity; -import com.ljsd.GameApplication; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; @@ -15,6 +14,7 @@ import com.ljsd.jieling.logic.store.BuyGoodsNewLogic; import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag; import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ToolsUtil; import config.SGlobalActivity; import config.SRechargeCommodityNewConfig; import config.SSurpriseBox; @@ -78,7 +78,7 @@ public class SuperBoxActivity extends AbstractActivity { * @param giftId * @param missionMap */ - private void giftHandle(User user, int giftId){ + public void giftHandle(User user, int giftId){ if (giftId < 0){ // 非礼包处理 return; @@ -161,16 +161,18 @@ public class SuperBoxActivity extends AbstractActivity { @Override public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { - long now = TimeUtils.now(); - long start = getSrartTime(); - long end = getEndTime(); - // 验证活动是否开启 - if (now < start || now > end){ - return new ArrayList<>(); - } if (activityMission == null){ + LOGGER.error("活动不存在数据库中,id:{},uid:{}",id,user.getId()); return new ArrayList<>(); } + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (activity == null){ + LOGGER.error("活动不存在数据表中,id:{}",id); + return new ArrayList<>(); + } + long now = TimeUtils.now(); + long createTime = user.getPlayerInfoManager().getCreateTime(); + long start = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute()); // 更新记录天数 activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1); // 库里存储的活动档位信息 @@ -229,53 +231,13 @@ public class SuperBoxActivity extends AbstractActivity { return true; } - /** - * 开始时间 - * @return - */ - public long getSrartTime(){ - long startTime = 0; - SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); - // 绝对时间 - if (activity.getTime() == ActivityType.OPEN_TYPE_TIME){ - startTime = activity.getStartTimeLong(); - } - // 开服时间 - else if (activity.getTime() == ActivityType.OPEN_TYPE_SERVER) { - String openTime = GameApplication.serverConfig.getOpenTime(); - long timeLong2 = TimeUtils.stringToTimeLong2(openTime); - startTime = timeLong2 + activity.getStartTimeLong() * 1000; - } - return startTime; - } - - /** - * 结束时间 - * @return - */ - public long getEndTime(){ - long endTime = 0; - SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); - // 绝对时间 - if (activity.getTime() == ActivityType.OPEN_TYPE_TIME){ - endTime = activity.getEndTimeLong(); - } - // 开服时间 - else if (activity.getTime() == ActivityType.OPEN_TYPE_SERVER) { - String openTime = GameApplication.serverConfig.getOpenTime(); - long timeLong2 = TimeUtils.stringToTimeLong2(openTime); - endTime = timeLong2 + activity.getEndTimeLong() * 1000; - } - return endTime; - } - /** * 验证前置礼包购买状态 * @param user * @param boxId * @return */ - private boolean checkBuyAgo(User user, int boxId){ + public boolean checkBuyAgo(User user, int boxId){ // 获取消息 Map missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/WeekCardActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/WeekCardActivity.java index 850c6f5c9..02e56402a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/WeekCardActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/WeekCardActivity.java @@ -12,6 +12,7 @@ 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.util.ItemUtil; +import com.ljsd.jieling.util.ToolsUtil; import config.*; import manager.STableManager; import util.TimeUtils; @@ -37,6 +38,8 @@ public class WeekCardActivity extends AbstractActivity { ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); user.getActivityManager().getActivityMissionMap().put(id, mission); + // 刷新礼包信息 +// refreshGood(user); // 初始化礼包信息 user.getPlayerInfoManager().setWeekCard(new HashMap<>()); LOGGER.info("月卡初始化...uid={} activityId={}",user.getId(), id); @@ -66,21 +69,42 @@ public class WeekCardActivity extends AbstractActivity { } } + /** + * 刷新礼包信息 + */ +// private void refreshGood(User user){ +// SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); +// if (activity == null){ +// return; +// } +// int[] canBuyRechargeId = activity.getCanBuyRechargeId(); +// if (canBuyRechargeId == null || canBuyRechargeId.length <= 0){ +// return; +// } +// Map receiveMap = user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap(); +// for (int goodId : canBuyRechargeId) { +// AbstractWelfareBag bag = receiveMap.get(goodId); +// if (bag == null){ +// LOGGER.error("礼包刷新结束,礼包不存在,活动id:{},礼包id:{}",id, canBuyRechargeId[0]); +// continue; +// } +// PerpetualWelfareBag welfareBag = (PerpetualWelfareBag) bag; +// welfareBag.refresh(); +// } +// } + /** * 封装周卡信息 - * @param cardId - * @param activityId - * @param valueMap - * @return */ private Map packagingWeekCardMap(User user, int activityId, int cardId, Map valueMap){ HashMap result = new HashMap<>(); Map config = STableManager.getConfig(SWeekcardConfig.class); - SWeekcardConfig sWeekcardConfig = config.get(cardId); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(activityId); + long createTime = user.getPlayerInfoManager().getCreateTime(); // 计算间隔时间 - long startTimeLong = WeekCardLogic.getInstance().getStartTime(user, activityId); + long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute()); int days = TimeUtils.differentDays(startTimeLong, TimeUtils.now()) + 1; for (int[] ints : sWeekcardConfig.getBaseRewardID()) { @@ -111,8 +135,11 @@ public class WeekCardActivity extends AbstractActivity { Map> weekCard = user.getPlayerInfoManager().getWeekCard(); Map rewardConfigMap = STableManager.getConfig(SWeekRewardConfig.class); Map configMap = STableManager.getConfig(SWeekcardConfig.class); + + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + long createTime = user.getPlayerInfoManager().getCreateTime(); // 计算间隔时间 - long startTimeLong = WeekCardLogic.getInstance().getStartTime(user,id); + long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute()); int days = TimeUtils.differentDays(startTimeLong, TimeUtils.now())+1; for (Map.Entry> entry : weekCard.entrySet()) { @@ -151,7 +178,7 @@ public class WeekCardActivity extends AbstractActivity { } weekCard.put(weekCardId,value); } - if (itemArrs.size() == 0) { + if (itemArrs.isEmpty()) { return; } // 更新数据 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/XunBaoMiZongActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/XunBaoMiZongActivity.java index 52d4a0658..62dc0dcd9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/XunBaoMiZongActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/XunBaoMiZongActivity.java @@ -6,7 +6,7 @@ import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.XunBaoMiZongEvent; import com.ljsd.jieling.logic.dao.root.User; -public class XunBaoMiZongActivity extends AbstractActivity { +public class XunBaoMiZongActivity extends DefaultEmptyActivity { public XunBaoMiZongActivity(int id) { super(id); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/WeekCardLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/WeekCardLogic.java index 8f39de39d..2b9b51e4f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/WeekCardLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/WeekCardLogic.java @@ -1,7 +1,6 @@ package com.ljsd.jieling.logic.activity.activityLogic; -import com.ljsd.GameApplication; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -11,6 +10,7 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.ToolsUtil; import config.SGlobalActivity; import config.SWeekRewardConfig; import config.SWeekcardConfig; @@ -73,9 +73,13 @@ public class WeekCardLogic { SWeekcardConfig sWeekcardConfig = config.get(cardId); ArrayList list1 = new ArrayList<>(); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(activityId); + long createTime = user.getPlayerInfoManager().getCreateTime(); // 计算间隔时间 - long startTimeLong = getStartTime(user, activityId); - int days = TimeUtils.differentDays(startTimeLong, TimeUtils.now())+1; + long now = TimeUtils.now(); + long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1, activity.getCycleMinute()); + + int days = TimeUtils.differentDays(startTimeLong, now)+1; for (int[] ints : sWeekcardConfig.getBaseRewardID()) { int day = ints[0]; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java index 34a12dc8d..751f340c3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/ActivityStateChangeHandler.java @@ -32,8 +32,8 @@ public class ActivityStateChangeHandler implements IEventHandler { if(state == ActivityType.OPEN_STATE){ SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); if(sGlobalActivity.getShopId().length>0){ - long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1); - long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2); + long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 1, sGlobalActivity.getCycleMinute()); + long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2, sGlobalActivity.getCycleMinute()); for (int shopId : sGlobalActivity.getShopId()) { ActivityLogic.getInstance().checkNeedOpenStore(user,shopId,startTime,endTime); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index a2aefcfb4..4d2722922 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -180,16 +180,7 @@ public class UserMissionManager extends MongoBase { * @throws Exception */ public void calCumulationDataResult(User user, MissionType missionType, Map> missionTypeEnumListMap, Object...parm) throws Exception { - if(missionType == MissionType.BLOODY_KILL_NUMS){ - if(!bloodyMissionIdsType.getDoingMissionIds().isEmpty()){ - CumulationData.Result result = new CumulationData.Result(missionType, 0); - bloodyMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION),null); - if(result.value == 1){ - updateString("bloodyMissionIdsType",bloodyMissionIdsType); - } - } - return; - } + if(!dailyMissionIdsType.getDoingMissionIds().isEmpty()){ List sTaskConfigs = SDailyTasksConfig.getsTaskConfigByTypeMap(missionType.getMissionTypeValue()); if (sTaskConfigs != null) { @@ -247,6 +238,7 @@ public class UserMissionManager extends MongoBase { } } + if(!jadeDynastyMissionType.getDoingMissionIds().isEmpty() ){ List sThemeActivityTaskConfigs = SThemeActivityTaskConfig.sThemeTaskConfigListByTypeMapTmp.get(missionType.getMissionTypeValue()); if(sThemeActivityTaskConfigs!=null){ @@ -284,9 +276,8 @@ public class UserMissionManager extends MongoBase { } if(!achievementMissionTypMap.getDoingMissionIds().isEmpty() ){ - List sAchievementConfigs = SAchievementConfig.sTaskConfigByTypeMap.get(missionType.getMissionTypeValue()); - if(sAchievementConfigs!=null&&sAchievementConfigs.size()!=0){ + if(sAchievementConfigs!=null&& !sAchievementConfigs.isEmpty()){ CumulationData.Result result= achievementMap.updateData(missionType, parm); if(result!=null){ achievementMissionTypMap.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.ACHIEVEMISSION),achievementMap); @@ -296,6 +287,7 @@ public class UserMissionManager extends MongoBase { } } + // 东海寻仙 if (!donghaiXunxianMission.getDoingMissionIds().isEmpty()){ CumulationData.Result result = donghaiXunxianData.updateData(missionType, parm); @@ -305,10 +297,11 @@ public class UserMissionManager extends MongoBase { updateString("donghaiXunxianMission",donghaiXunxianMission); } } + //缥缈之旅 if(!mistyTripMissionType.getDoingMissionIds().isEmpty() ){ Map config = STableManager.getConfig(SJourneyWithWind.class); - if(config!=null&&config.size()!=0){ + if(config!=null&& !config.isEmpty()){ int starSum = HardStageLogic.getHardStageStarsSum(user); if(starSum != 0 && mistyTripCumulationData.getHardstage_stars() == 0){ mistyTripCumulationData.setHardstage_stars(starSum); @@ -327,9 +320,10 @@ public class UserMissionManager extends MongoBase { } } } + // 公用任务类型,累计次数形式 CumulationData.Result result = cumulationData.updateData(missionType, parm); - if(result!=null){ + if(result != null){ updateString("cumulationData",cumulationData); // vip任务 vipMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.VIPMISSION),cumulationData); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java index e21a2256d..58698921a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java @@ -94,30 +94,45 @@ public class GuildInfo extends MongoBase { this.serverId = GameApplication.serverId; } - public void addMembers(int type,int uid){ + public void setMembers(Map> members) { + this.members = members; + updateString("members", members); + } + + public void addMembers(int type, int uid){ if(!members.containsKey(type)){ members.put(type,new HashSet<>()); } members.get(type).add(uid); totalMembers++; - updateString("members." + type,members.get(type)); updateString("totalMembers",totalMembers); + setMembers(members); } public boolean removeMember(int type,int uid){ boolean remove = members.get(type).remove(uid); if(remove){ totalMembers--; - updateString("members." + type,members.get(type)); updateString("totalMembers",totalMembers); + setMembers(members); } return remove; } + public void appointMember(int oldPost, int newPost, int uid){ + boolean removed = members.get(oldPost).remove(uid); + if(removed){ + if(!members.containsKey(newPost)){ + members.put(newPost,new HashSet<>()); + } + members.get(newPost).add(uid); + } + setMembers(members); + } + public void setAnnounce(String announce) { this.announce = announce; updateString("announce",announce); - } public int getId() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java index 317d55413..664640e86 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java @@ -633,12 +633,12 @@ public class EquipLogic { ArrayList costList = new ArrayList<>(); costList.add(config.getFormula()); costList.add(config.getResource()); - - boolean cost = ItemUtil.itemCost(user, costList, BIReason.GIFT_UP_STAR_COST, 1); + boolean cost = ItemUtil.checkCost(user, costList); if (!cost){ throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[][]{{giftId, 1}}, BIReason.GIFT_UP_STAR_GET); + ItemUtil.itemCost(user, costList, BIReason.GIFT_EQUIP_UP_COST, 0); HeroInfoProto.GiftEquipUpStarResponse.Builder builder = HeroInfoProto.GiftEquipUpStarResponse.newBuilder().setDrop(drop); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GiftEquipUpStarResponse_VALUE, builder.build(), true); } 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 b9a4cf36a..16c8485c2 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 @@ -685,7 +685,7 @@ public class GuildLogic { GuildInfo guildInfo = GuilidManager.getGuildInfo(targetGuildId); int uidType = getMemberType(uid, guildInfo.getMembers()); - boolean isIn=false; + boolean isIn = false; for(Set memberEntry : guildInfo.getMembers().values()){ if(memberEntry.contains(targetUid)){ isIn =true; @@ -707,8 +707,7 @@ public class GuildLogic { throw new ErrorCodeException(ErrorCode.FAMILY_LEADER_MAX); } } - guildInfo.removeMember(targetType,targetUid); - guildInfo.addMembers(position,targetUid); + guildInfo.appointMember(targetType, position, targetUid); sendPositionChange(targetUid,position,guildId); if(position == GlobalsDef.CHAIRMAN){ guildInfo.removeMember(GlobalsDef.CHAIRMAN,uid); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java index d1e226f78..b0b53b560 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java @@ -4,10 +4,7 @@ import com.ljsd.jieling.logic.dao.Baubles; import com.ljsd.jieling.logic.dao.Hero; import com.ljsd.jieling.logic.dao.PropertyItem; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author hj @@ -58,6 +55,8 @@ public class HelpHero { private List baublesList = new ArrayList<>(); + private Set heroGiftEquipList = new HashSet<>();//礼物装备列表 + public int getUid() { return uid; } @@ -145,4 +144,16 @@ public class HelpHero { public void setBaublesList(List baublesList) { this.baublesList = baublesList; } + + public Map getHomeEquipMap() { + return homeEquipMap; + } + + public Set getHeroGiftEquipList() { + return heroGiftEquipList; + } + + public void setHeroGiftEquipList(Set heroGiftEquipList) { + this.heroGiftEquipList = heroGiftEquipList; + } } 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 a50a01bc0..025aa1edf 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 @@ -6998,18 +6998,17 @@ public class HeroLogic { HeroInfoProto.PotentialUpLvResponse.Builder builder = HeroInfoProto.PotentialUpLvResponse.newBuilder(); builder.setUpLv(hero.getPotentialLv(type)); - builder.setGiftLv(getGiftPotentialLv(user, heroId)); + builder.setGiftLv(getGiftPotentialLv(user, hero)); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.PotentialUpLvResponse_VALUE, builder.build(), true); } /** * 获取礼物加成得潜能等级 */ - public int getGiftPotentialLv(User user, String heroId) { + public int getGiftPotentialLv(User user, Hero hero) { Map configMap = SEquipConfig.equipConfigMap; Set playerGiftEquipList = user.getPlayerInfoManager().getPlayerGiftEquipList(); - Hero hero = user.getHeroManager().getHero(heroId); Set heroGiftEquipList = hero.getHeroGiftEquipList(); HashSet set = new HashSet<>(); @@ -7079,7 +7078,7 @@ public class HeroLogic { if (!openPotential) { return 0; } - int giftPotentialLv = getGiftPotentialLv(user, hero.getId()); + int giftPotentialLv = getGiftPotentialLv(user, hero); int potentialLv = hero.getPotentialLv(type); SPotentialNew potentialNew = SPotentialNew.typeMap.get(type).get(potentialLv + giftPotentialLv); if (potentialNew == null) { 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 377b28f96..5afe9346b 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 @@ -14,6 +14,7 @@ import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.logic.activity.AbstractActivity; import com.ljsd.jieling.logic.activity.ActivityTypeEnum; +import com.ljsd.jieling.logic.activity.EquipUpLevelActivity; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.SaveHeroForceEvent; import com.ljsd.jieling.logic.dao.*; @@ -761,47 +762,17 @@ public class ItemLogic { /** *装备升星(云游商人) */ - public void equipUpLevel(ISession session, int activityId,int equipId,int itemId,int itemNum,MessageTypeProto.MessageType messageType) throws Exception{ + public void equipUpLevel(ISession session, int activityId, int equipId) throws Exception{ PlayerInfoProto.EquipUpLevelResponse.Builder response = PlayerInfoProto.EquipUpLevelResponse.newBuilder(); - response.setResult(false); - User user = UserManager.getUser(session.getUid()); - Map config = STableManager.getConfig(SComposeBook.class); - SComposeBook composeBook = config.get(equipId); - if(composeBook == null){ - throw new ErrorCodeException(ErrorCode.CFG_NULL,"云游商人,idkey配置不存在:"+equipId); + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(activityId); + if (abstractActivity == null){ + throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN,"云游商人,活动不存在:"+activityId); } - ActivityMission misson = user.getActivityManager().getActivityMissionMap().get(activityId); - if(misson == null){ - LOGGER.error("misson为空,activityId:{}",activityId); - throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); - } - Map integerSComposeActivityMap = SComposeActivity.getConfigMap().get(activityId); - int typeId = integerSComposeActivityMap.get(composeBook.getType()).getId(); - ActivityProgressInfo progress = misson.getActivityMissionMap().get(typeId); - if(progress == null){ - LOGGER.error("progress为空,type:{}",composeBook.getType()); - throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); - } - if(progress.getProgrss() <= 0){ - LOGGER.error("progress次数不足,num:{}",progress.getProgrss()); - throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT); - } - boolean itemCost = ItemUtil.itemCost(user, new int[][]{composeBook.getNeedItems()[0],composeBook.getNeedCost()[0]}, BIReason.EQUIP_UPLEVEL_COST, equipId); - if(!itemCost){ - LOGGER.error("item不足,equipId:{},itemId:{},itemNum:{}",equipId,itemId,itemNum); - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - progress.setProgrss(progress.getProgrss()-1); - user.getActivityManager().getActivityMissionMap().put(activityId,misson); - CommonProto.Drop.Builder drop = ItemUtil.drop(user,new int[][]{composeBook.getGoalItems()[0]},BIReason.EQUIP_UPLEVEL_REWARD); + EquipUpLevelActivity activity = (EquipUpLevelActivity) abstractActivity; + CommonProto.Drop.Builder drop = activity.takeReward2(session, equipId); response.setResult(true); response.setDrop(drop); - MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); - //发推送 - AbstractActivity acticityType = ActivityTypeEnum.getActicityById(activityId); - if(acticityType!=null){ - acticityType.sendActivityProgress(session, null); - } + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_UPLEVEL_RESPONSE.getNumber(),response.build(),true); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLogic.java index 4e8c92132..f73c0ba44 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLogic.java @@ -39,8 +39,8 @@ public class MissionLogic { return null; } SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); - 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 startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 1, sGlobalActivity.getCycleMinute()); + long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2, sGlobalActivity.getCycleMinute()); if(TimeUtils.now()>endTime){ return null; } @@ -103,13 +103,13 @@ public class MissionLogic { return task; } - public int[] resetJadeDynastyTaskInfo(User user, int type, int activityId, Map> missionTypeEnumListMap){ + public void resetJadeDynastyTaskInfo(User user, int type, int activityId, Map> missionTypeEnumListMap){ UserMissionManager missionManager = user.getUserMissionManager(); JadeDynastyMissionType jadeDynastyMissionType = missionManager.getJadeDynastyMissionType(); //周刷新检测 if (type == 2) { if (jadeDynastyMissionType.getWeekRefresh() != 0 && TimeUtils.now()> misionTypeListMap, GameEvent event, Object... parm) throws Exception { - UserMissionManager missionManager = user.getUserMissionManager(); //当前轮次破阵诛仙的活动ID int jadeAid = (int) parm[0]; MissionLogic.getInstance().resetJadeDynastyTaskInfo(user,1, jadeAid, misionTypeListMap); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java index 47b947567..894998659 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java @@ -20,7 +20,7 @@ public class MistyTripRefreshEventProcess implements BaseGameEventProcessor { UserMissionManager missionManager = user.getUserMissionManager(); MistyTripMissionType mistyTripMissionType = missionManager.getMistyTripMissionType(); //任务开始 - if(mistyTripMissionType.getDoingMissionIds().size() != 0 || mistyTripMissionType.getFinishMissionIds().size() != 0){ + if(!mistyTripMissionType.getDoingMissionIds().isEmpty() || !mistyTripMissionType.getFinishMissionIds().isEmpty()){ return; } Set journeyWithWind = STableManager.getConfig(SJourneyWithWind.class).keySet(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java index e60e2cf31..7c4dfa51a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java @@ -80,7 +80,7 @@ public abstract class AbstractMissionType { } public Set getDoingMissionIds() { - return doingMissionIds; + return doingMissionIds; } public void addFinishMissionId(int missionId) { 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 3ab5c4653..915132ef2 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 @@ -1046,7 +1046,7 @@ public class PlayerLogic { builder.setForce(HeroLogic.getInstance().calForce(heroNotBufferAttribute)); builder.setHero(CBean2Proto.getHongmengHero(userInMem, hero)); - builder.setPlayerGiftLv(HeroLogic.getInstance().getGiftPotentialLv(userInMem, heroId)); + builder.setPlayerGiftLv(HeroLogic.getInstance().getGiftPotentialLv(userInMem, hero)); Map guildSkill = userInMem.getGuildMyInfo().getGuildSkill(); int profession = SCHero.getsCHero().get(hero.getTemplateId()).getProfession(); Integer skill = guildSkill.getOrDefault(profession, 0); @@ -1095,8 +1095,8 @@ public class PlayerLogic { if (timingMailIds.contains(sTestWelfare.getId())) { continue; } - long startTime = ToolsUtil.getTimeLong(sTestWelfare.getStartTimeLong(),sTestWelfare.getEndTimeLong(),sTestWelfare.getTime(), 0, 1); - long endTime = ToolsUtil.getTimeLong(sTestWelfare.getStartTimeLong(),sTestWelfare.getEndTimeLong(),sTestWelfare.getTime(), 0, 2); + long startTime = ToolsUtil.getTimeLong(sTestWelfare.getStartTimeLong(),sTestWelfare.getEndTimeLong(),sTestWelfare.getTime(), 0, 1, 0); + long endTime = ToolsUtil.getTimeLong(sTestWelfare.getStartTimeLong(),sTestWelfare.getEndTimeLong(),sTestWelfare.getTime(), 0, 2, 0); if (now < startTime) { continue; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/PowerRiceRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/PowerRiceRank.java index c10bb1a1d..c09796d95 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/PowerRiceRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/PowerRiceRank.java @@ -12,6 +12,7 @@ import com.ljsd.jieling.logic.activity.event.UserMainTeamForceEvent; import com.ljsd.jieling.logic.dao.cross.CSPlayer; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.rank.RankEnum; +import com.ljsd.jieling.util.ToolsUtil; import config.SActivityRankingReward; import config.SGlobalActivity; import org.springframework.data.redis.core.ZSetOperations; @@ -59,13 +60,14 @@ public class PowerRiceRank extends AbstractRank implements IEventHandler { } //判斷是否在展示期 Map sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap(); - SGlobalActivity sGlobalActivity = sGlobalActivityMap.get(activityId); - if (sGlobalActivity == null) { + SGlobalActivity activity = sGlobalActivityMap.get(activityId); + if (activity == null) { return; } - long[] startAndEndTime = ActivityLogic.getStartAndEndTime(null, activityId); + long start = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0,1, activity.getCycleMinute()); + long end = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0,2, activity.getCycleMinute()); long now = TimeUtils.now(); - if (now > startAndEndTime[0] && now < startAndEndTime[1]) { + if (now > start && now < end) { if (event instanceof UserMainTeamForceEvent) { int uid = ((UserMainTeamForceEvent) event).getUid(); CSPlayer player = CrossServiceLogic.getPlayerByRedis(uid); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index 9f924b5bd..ac20b0f63 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -8,6 +8,7 @@ import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.exception.ErrorTableException; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.jbean.ActivityMission; @@ -1025,7 +1026,7 @@ public class BuyGoodsNewLogic { RechargeHandler handler = getRechargeHandler(config.getOtype()); AbstractWelfareBag bag = handler.getBag(user, goodsId); if (bag == null || !bag.isBuy()){ - throw new ErrorCodeException(ErrorCode.SHOP_NO_ITEM); + throw new ErrorTableException(104,"礼包已购买"); } //生成cp订单号 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 5bc1a19bb..56977f280 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -58,8 +58,8 @@ public class StoreLogic { long startTime, endTime; switch (sStoreTypeConfig.getStoreOpenRule()){ case 3: - startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_TIME, 0, 1); - endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_TIME, 0, 2); + startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_TIME, 0, 1, 0); + endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_TIME, 0, 2, 0); if (startTime != 0 && endTime != 0 && now > startTime && now < endTime && !openStoreInfo.contains(sStoreTypeConfig.getId())) { for (ISession session : OnlineUserManager.sessionMap.values()) { if (session.getFiveReady() == 1) { @@ -88,8 +88,8 @@ public class StoreLogic { continue; } long userCreateTime = user.getPlayerInfoManager().getCreateTime(); - startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE, userCreateTime, 1); - endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE, userCreateTime, 2); + startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE, userCreateTime, 1, 0); + endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE, userCreateTime, 2, 0); if (now < startTime || now > endTime) { continue; } @@ -103,8 +103,8 @@ public class StoreLogic { } break; case 7: - startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER, 0, 1); - endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER, 0, 2); + startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER, 0, 1, 0); + endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER, 0, 2, 0); if (now < startTime || now > endTime) { continue; } @@ -300,13 +300,13 @@ public class StoreLogic { } if(sStoreTypeConfig.getStoreOpenRule() == 6 ){ long userCreateTime = user.getPlayerInfoManager().getCreateTime(); - startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_ROLE,userCreateTime, 1); - endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE,userCreateTime, 2); + startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_ROLE,userCreateTime, 1, 0); + endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_ROLE,userCreateTime, 2, 0); } if(sStoreTypeConfig.getStoreOpenRule() == 7 ){ long userCreateTime = user.getPlayerInfoManager().getCreateTime(); - startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_SERVER,userCreateTime, 1); - endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER,userCreateTime, 2); + startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_SERVER,userCreateTime, 1, 0); + endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER,userCreateTime, 2, 0); } Map itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); storeManager.newStoreInfo(sStoreTypeConfig.getId(),System.currentTimeMillis(),startTime,endTime,itemNumMap); @@ -389,8 +389,8 @@ public class StoreLogic { continue; } if(sStoreTypeConfig.getStoreOpenRule() == 7){ - long startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_SERVER,0, 1); - long endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER,0, 2); + long startTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(), sStoreTypeConfig.getEndTimeLong(),ActivityType.OPEN_TYPE_SERVER,0, 1, 0); + long endTime = ToolsUtil.getTimeLong(sStoreTypeConfig.getStartTimeLong(),sStoreTypeConfig.getEndTimeLong(), ActivityType.OPEN_TYPE_SERVER,0, 2, 0); long now = TimeUtils.now(); if(now>startTime&&now itemNumMap = getStoreItem(storeId,sStoreTypeConfig,user); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/TimeLimitWelfareBag.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/TimeLimitWelfareBag.java index fc42fd4ea..eb87758a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/TimeLimitWelfareBag.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/TimeLimitWelfareBag.java @@ -17,6 +17,7 @@ public class TimeLimitWelfareBag extends AbstractWelfareBag { int anInt = value[1]; if(ActivityLogic.checkActivityOpen(user,anInt)){ setOpen(true); + long[] result = ActivityLogic.getStartAndEndTime(user, anInt); setStartTime(result[0]); setEndTime(result[1]); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java index bdaf557a7..95dc20b52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java @@ -220,9 +220,9 @@ public class ThreadManager implements IManager { public static void reStart(){ LOGGER.info("重启线程池!!"); -// scheduledExecutor.shutdown(); scheduledFutureSets.forEach(future -> future.cancel(false)); scheduledFutureSets.clear(); + TaskKit.reset(); go(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java b/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java index c15e3e0f1..18a9f0f7b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import util.TimeUtils; import java.util.*; import java.util.concurrent.locks.ReadWriteLock; @@ -26,7 +27,7 @@ public class DynamicLRUCache { } public V get(K key) { - lock.readLock().lock(); +// lock.readLock().lock(); try { TimedCacheEntry entry = cache.get(key); if (entry != null && !isEntryExpired(entry)) { @@ -35,7 +36,7 @@ public class DynamicLRUCache { } return null; } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } @@ -52,34 +53,34 @@ public class DynamicLRUCache { } public void remove(K key) { - lock.writeLock().lock(); +// lock.writeLock().lock(); try { cache.remove(key); } finally { - lock.writeLock().unlock(); +// lock.writeLock().unlock(); } } public boolean containsKey(K key) { - lock.readLock().lock(); +// lock.readLock().lock(); try { return cache.containsKey(key); } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public int size() { - lock.readLock().lock(); +// lock.readLock().lock(); try { return cache.size(); } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public List getAll() { - lock.readLock().lock(); +// lock.readLock().lock(); try { List values = new ArrayList<>(); for (TimedCacheEntry entry : cache.values()) { @@ -89,28 +90,28 @@ public class DynamicLRUCache { } return values; } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public void shrinkToFit() { - lock.writeLock().lock(); - try { - // 减少缓存大小调整的频率 - if (cache.size() < maxSize / 2 && maxSize > 100) { - maxSize /= 2; // 缩小缓存容量 - } - Iterator>> iterator = cache.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry> entry = iterator.next(); - if (isEntryExpired(entry.getValue())) { - iterator.remove(); // 使用迭代器来安全移除条目 - } - } - } finally { - lock.writeLock().unlock(); + long now = TimeUtils.now(); + // 减少缓存大小调整的频率 + if (cache.size() < maxSize / 2 && maxSize > 100) { + maxSize /= 2; // 缩小缓存容量 } - LOGGER.info("当前用户缓存列表大小,num:{},max:{}", size(), maxSize); + Iterator>> iterator = cache.entrySet().iterator(); + HashSet removeUsers = new HashSet<>(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + if (isEntryExpired(entry.getValue())) { + removeUsers.add((Integer) entry.getKey()); + } + } + for (Integer id : removeUsers) { + cache.remove(id); + } + LOGGER.info("当前用户缓存列表大小,num:{},max:{},time:{}ms", size(), maxSize, TimeUtils.now()-now); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index dba00c7fc..cd6c2ba5c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -1508,6 +1508,20 @@ public class ItemUtil { return checkCostLong(user,longMap); } + public static boolean checkCost(User user, List item) throws Exception { + HashMap itemMap = new HashMap<>(); + for (int[][] ints : item) { + selectCost(ints,itemMap); + } + return checkCost(user,itemMap); + } + + public static boolean checkCost(User user, int[][] item) throws Exception { + HashMap itemMap = new HashMap<>(); + selectCost(item,itemMap); + return checkCost(user,itemMap); + } + public static boolean checkCostLong(User user, Map itemMap) throws Exception { if (itemMap == null || itemMap.isEmpty()) { return true; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java index eaf891ee9..c72cdd9ba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ToolsUtil.java @@ -1,52 +1,89 @@ package com.ljsd.jieling.util; import com.ljsd.GameApplication; +import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import util.TimeUtils; import java.util.*; public class ToolsUtil { - - public static long getTimeLong(long startTimeLong, long endTimeLong, int time, long createUserTime, int type){ + private static final Logger LOGGER = LoggerFactory.getLogger(ToolsUtil.class); + /** + * 根据不同类型获取活动时间 + * + * @param startTimeLong 表里面得开始时间 + * @param endTimeLong 表里面得结束时间 + * @param time 时间类型 + * @param createUserTime 创角时间 + * @param type 1 开始时间, 2 结束时间 + * @param cycleTime 循环时间 + * @return 时间 + */ + public static long getTimeLong(long startTimeLong, long endTimeLong, int time, long createUserTime, int type, int cycleTime){ long baseTime = startTimeLong; if(type == 2){ baseTime = endTimeLong; } - long startTime=0; + long resultTime=0; switch (time){ - case ActivityType.OPEN_TYPE_TIME: - startTime = baseTime; + case ActivityType.OPEN_TYPE_TIME://绝对时间 + resultTime = baseTime; break; - case ActivityType.OPEN_TYPE_ROLE: - startTime = TimeUtils.getAppointTimeInXDay(createUserTime,0) + baseTime*1000; + case ActivityType.OPEN_TYPE_ROLE://创角时间 + resultTime = TimeUtils.getAppointTimeInXDay(createUserTime,0) + baseTime*1000; break; - case ActivityType.OPEN_TYPE_SERVER: + case ActivityType.OPEN_TYPE_SERVER://开服时间 long serverOpenTime = GameApplication.serverConfig.getCacheOpenTime(); - startTime = serverOpenTime + baseTime*1000; + resultTime = serverOpenTime + baseTime * 1000; break; case ActivityType.OPEN_TYPE_MONTHS: if(type == 1){ if(baseTime == 1){//第一个月 - startTime = GameApplication.serverConfig.getCacheOpenTime(); + resultTime = GameApplication.serverConfig.getCacheOpenTime(); }else{ - startTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime-1); + resultTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime-1); } } if(type == 2){ if(baseTime ==1){ - startTime = TimeUtils.getMonthEndTime(GameApplication.serverConfig.getCacheOpenTime()); + resultTime = TimeUtils.getMonthEndTime(GameApplication.serverConfig.getCacheOpenTime()); }else{ - startTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime); + resultTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime); } } break; + case ActivityType.OPEN_TYPE_CYCLE://循环活动 + long now = TimeUtils.now(); + // 循环时间 + long cycleTimeMils = cycleTime * TimeUtils.ONE_MINUTE; + // 最近的开始时间 + long latelyStartTime = TimeUtils.getLatelyTime(startTimeLong, cycleTimeMils, now); + if (type == 1){ + resultTime = latelyStartTime; + }else { + // 最近的结束时间 + resultTime = latelyStartTime + (endTimeLong - startTimeLong); + } + break; + default: + // 开始时间 + if(type == 1){ + resultTime = startTimeLong; + } + // 结束时间 + if(type == 2){ + resultTime = endTimeLong; + } + break; } - return startTime; + return resultTime; } public static long getEndTimeLong(long startTimeLong , long endTimeLong,int time,long createUserTime,int dayOut){ - long timeLong = getTimeLong(startTimeLong, endTimeLong, time, createUserTime, 2); + long timeLong = getTimeLong(startTimeLong, endTimeLong, time, createUserTime, 2, 0); return timeLong + TimeUtils.DAY * dayOut; } diff --git a/tablemanager/src/main/java/config/SGlobalActivity.java b/tablemanager/src/main/java/config/SGlobalActivity.java index 5f4974926..a37a9d535 100644 --- a/tablemanager/src/main/java/config/SGlobalActivity.java +++ b/tablemanager/src/main/java/config/SGlobalActivity.java @@ -19,6 +19,8 @@ public class SGlobalActivity implements BaseConfig { private int time; + private int cycleMinute; + private long startTimeLong; private long endTimeLong; @@ -74,7 +76,7 @@ public class SGlobalActivity implements BaseConfig { int time = sGlobalActivity.getTime(); String startTime = sGlobalActivity.getStartTime(); String endtime = sGlobalActivity.getEndtime(); - if(time == 1 ){//ActivityType.OPEN_TYPE_TIME + if(time == 1 || time == 6){//ActivityType.OPEN_TYPE_TIME if(!"0".equals(startTime)){ sGlobalActivity.setStartTimeLong(TimeUtils.parseTimeToMiles(startTime,TimeUtils.Stand_CeHua_Data_format)); } @@ -170,6 +172,10 @@ public class SGlobalActivity implements BaseConfig { return time; } + public int getCycleMinute() { + return cycleMinute; + } + public static List getsGlobalActivityMapByType(int type) { return sGlobalActivityMapByType.get(type); }