diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index 9e9ec5c68..57eaa33df 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -114,6 +114,9 @@ public class GlobalDataManaager implements IManager { int id = sGlobalSystemConfig.getId(); long systemOpenLong = sGlobalSystemConfig.getSystemOpenLong(); long systemEndLong = sGlobalSystemConfig.getSystemEndLong(); + if (now < systemOpenLong || now > systemEndLong) { + continue; + } if(openTimeOfFuntionCache.containsKey(id)){ //强制关闭 if(nowsystemEndLong)){ @@ -154,8 +157,8 @@ public class GlobalDataManaager implements IManager { long mod = passTims % (diffTime + seasonInterval); // 每个周期的时间+间隔时间 if(mod < diffTime ){//新的周期开启 一轮周期的时间 //开服几天后开启 + int[]limitDay = sGlobalSystemConfig.getIfOpen(); if(getServerOpenTimeCompareSpecialTimeResult()){ - int[]limitDay = sGlobalSystemConfig.getIfOpen(); if(limitDay.length > 0){ if( limitDay[0] == 2 ){ long day = TimeUtils.getGapDaysByTwoTime(GameApplication.serverConfig.getOpenTime(),TimeUtils.getTimeStamp2(TimeUtils.now()))+1; @@ -165,9 +168,18 @@ public class GlobalDataManaager implements IManager { } } } - openList.add(id); + //计算开启时间、关闭时间 long turns = passTims / ((diffTime + seasonInterval)); + if (limitDay.length > 0) { + // 达到指定轮数,不再开启该功能 + if (limitDay[0] == 3) { + if (turns > limitDay[1]) { + continue; + } + } + } + openList.add(id); long addTim = turns * (diffTime + seasonInterval); long timeOpenOfThis =seasonOpenLong+addTim; long timeCloseOfThis =seasonEndLong+addTim; 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 be604aa36..616abe26b 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 @@ -116,7 +116,8 @@ public class ActivityLogic implements IEventHandler{ ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL); ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL_ADVANCE); ActivityLogic.getInstance().resumeActivity(user,ActivityType.TREASURE); - + //每日特惠礼包开启的活動刷新 + ActivityLogic.getInstance().resumeActivity(user,ActivityType.DAILY_PREFERENTIAL_GIFT); Set upFiveActivityTypes = new HashSet<>(); upFiveActivityTypes.add(ActivityType.SevenLogin); upFiveActivityTypes.add(ActivityType.RECHARGE_SUM_DAY); @@ -175,6 +176,9 @@ public class ActivityLogic implements IEventHandler{ if (time == ActivityType.OPEN_TYPE_ROLE) { continue; } + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + continue; + } if(time == ActivityType.OPEN_TYPE_MONTHS){ //now = 当前是开服第几个月 } @@ -297,6 +301,9 @@ public class ActivityLogic implements IEventHandler{ * @param activityId */ public void initMissionInfo(ActivityMission activityMission,int activityId){ + if(activityId == ActivityType.DAILY_PREFERENTIAL_GIFT){ + return; + } List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(activityId); if(sActivityRewardConfigs == null){return;} for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){ @@ -438,6 +445,9 @@ public class ActivityLogic implements IEventHandler{ } Map activityMissionMap = activityManager.getActivityMissionMap(); for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + continue; + } int activityId = sGlobalActivity.getId(); ////天尊降世活动特殊处理 if (activityMissionMap.containsKey(42)){ @@ -622,12 +632,18 @@ public class ActivityLogic implements IEventHandler{ if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) { continue; } - int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); - int endTime; - if(sGlobalActivity.getGapTime()!=0){ - endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000); + int startTime = 0; + int endTime = 0; + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + startTime=(int)(activityState.getValue().getCreatTime()/1000); + endTime = startTime+604800; }else{ - endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); + 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); + } } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); if(abstractActivity==null){ 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 6c2f48958..6f93c52e7 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 @@ -104,11 +104,12 @@ public interface ActivityType { int TRANSFORMATION_DRAW_CARD = 86;//方寸寻宝 int CONTINUOUS_GIFT_NEW = 87;//新连续礼包 int ARENA_RANK_EXPERIMENT = 88;//竞技试炼 + int DAILY_PREFERENTIAL_GIFT = 89;//每日特惠礼包开启的活动 int NEW_RECHARGE_SUM_DAY = 90;//新积天豪礼 int SPECIAL_MONSTER_RANDOM_ACTIVITY = 100;//灵兽宝阁活动 int SPECIAL_MONSTER_GIFT_ACTIVITY = 101;//灵兽礼包 - + int NEW_PLAYER_SHOP = 91; // 新人商城 int NEW_GENERAL_ATTACK = 200;//新将来袭 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index 96b3ab866..cf1f35e87 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -95,7 +95,9 @@ public enum ActivityTypeEnum { CONTINUOUS_GIFT_NEW(ActivityType.CONTINUOUS_GIFT_NEW,ContinuousGiftActivity::new),//新连续礼包 ARENA_RANK_EXPERIMENT(ActivityType.ARENA_RANK_EXPERIMENT,ArenaRankActivity::new),//竞技试炼 NEW_RECHARGE_SUM_DAY(ActivityType.NEW_RECHARGE_SUM_DAY,NewRechargeSumDayActivity::new),//新积天豪礼 + DAILY_PREFERENTIAL_GIFT(ActivityType.DAILY_PREFERENTIAL_GIFT,DailyPreferentialGiftActivity::new), SUMMON_TREASURE(ActivityType.SUMMON_TREASURE,SummonTreasureActivity::new),//招募秘宝 + NEW_PLAYER_SHOP(ActivityType.NEW_PLAYER_SHOP, NewPlayerShopActivity::new) ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java new file mode 100644 index 000000000..f6b20188d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java @@ -0,0 +1,192 @@ +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.globals.Global; +import com.ljsd.jieling.jbean.ActivityManager; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.event.IEvent; +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.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import config.SErrorCodeEerverConfig; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; +import util.StringUtil; +import util.TimeUtils; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 每日特惠礼包开启的活动 + */ + +public class DailyPreferentialGiftActivity extends AbstractActivity{ + + public DailyPreferentialGiftActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception{ + ActivityMission mission = new ActivityMission(); + // 初始化阶段奖励 + List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + ActivityLogic.getInstance().initOtherMission(mission, sActivityRewardConfigs.stream().mapToInt(n->n.getId()).boxed().collect(Collectors.toList())); + //mission.setV((int)(TimeUtils.getAppointTime(0)/1000)+3600*24*7); + mission.setV(0); + mission.setCreatTime(TimeUtils.getAppointTime(0)); + user.getActivityManager().getActivityMissionMap().put(id, mission); + //ActivityMission activityMission =user.getActivityManager().getActivityMissionMap().get(this.id); + //sendActivityProgress(user, activityMission, null); + ActivityLogic.getInstance().sendActivityInfo(user, id); + } + + @Override + public void onEvent(IEvent event) throws Exception{ + + + + } + /** + *购买后7天内 每天可以领取奖励 领取状态每日重置 + */ + @Override + public void onResume(User user) throws Exception { + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if(mission == null){ + return; + } + //long timeTemp = mission.getCreatTime(); + //开启礼包的第几天 + int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(mission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now()))+1; + List rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + if(rewardConfig == null){ + return; + } + Map rewardMap = new HashMap(); + for(SActivityRewardConfig config:rewardConfig){ + for(int[]reward:config.getReward()){ + if(rewardMap.containsKey(reward[0])){ + rewardMap.put(reward[0],rewardMap.get(reward[0])+reward[1]); + }else{ + rewardMap.put(reward[0],reward[1]); + } + } + } + String title = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_txt"); + if(day >7){ + //第八天登錄 發送所有獎勵 TODO + //下线当天的活动处理 + sendSpecailMail(user,title,content,mission); + for(int i = mission.getV()+1;i <= 7;i++){ + MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + LOGGER.info("11:"+i); + } + //刪除數據 + user.getActivityManager().getActivityMissionMap().remove(id); + ISession session = OnlineUserManager.sessionMap.get(user.getId()); + if(session!=null){ + PlayerInfoProto.SpecailActivityUpateIndication.Builder indication = PlayerInfoProto.SpecailActivityUpateIndication.newBuilder(); + indication.addCloseActivityId(ActivityType.DAILY_PREFERENTIAL_GIFT); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.SPECIAL_ACTIVITY_UPDATE_INDICATION_VALUE, indication.build(), true); + } + return; + }else{ + //下线当天的活动处理 + sendSpecailMail(user,title,content,mission); + for(int i = mission.getV()+1;inew int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + LOGGER.info("22:"+i); + } + List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + if(sActivityRewardConfigs == null){return;} + for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){ + ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); + //activityProgressInfo.setProgrss(ActivityLogic.getInstance().getInitActivityMissionProgress(id)); + activityProgressInfo.setState(0); + mission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo); + } + ActivityLogic.getInstance().initMissionInfo(mission,id); + if(day > mission.getV()){ + mission.setV(day-1); + } + sendActivityProgress(user, mission, null); + } + } + + //当天为领取特殊处理 + public static void sendSpecailMail( User user,String title,String content, ActivityMission mission ){ + Map progressMap = mission.getActivityMissionMap(); + Map rewardMap1 = new HashMap(); + for (Map.Entry progress:progressMap.entrySet()){ + if(progress.getValue().getState() == ActivityType.WILL_TAKE){ + SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(progress.getKey()); + if(sActivityRewardConfig == null){ + continue; + } + for(int[]reward:sActivityRewardConfig.getReward()){ + if(rewardMap1.containsKey(reward[0])){ + rewardMap1.put(reward[0],rewardMap1.get(reward[0])+reward[1]); + }else{ + rewardMap1.put(reward[0],reward[1]); + } + } + } + } + if(rewardMap1.size()>0){ + mission.setV(mission.getV()+1); + MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap1.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + } + + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception{ + User user = UserManager.getUser(session.getUid()); + SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (sActivityRewardConfig == null || sActivityRewardConfig.getActivityId() != id) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + ActivityManager activityManager = user.getActivityManager(); + ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); + if (activityMission == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId); + if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) { + throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); + } + int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(activityMission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now())); + //if(activityMission.getV()