循环活动,time类型为6

master_otnew
grimm 2024-01-16 17:19:42 +08:00
parent fe5bed800a
commit f6de5eb7d0
9 changed files with 143 additions and 240 deletions

View File

@ -421,6 +421,9 @@ public class TimeUtils {
return calendar.getTimeInMillis(); return calendar.getTimeInMillis();
} }
/**
* 0
*/
public static long getAppointTimeInXDay(long date, int hour) { public static long getAppointTimeInXDay(long date, int hour) {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date); calendar.setTimeInMillis(date);

View File

@ -2,18 +2,12 @@ package com.ljsd.jieling.config.clazzStaticCfg;
import com.ljsd.GameApplication; import com.ljsd.GameApplication;
import com.ljsd.jieling.globals.Global; 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 config.*;
import manager.AbstractClassStaticConfig; import manager.AbstractClassStaticConfig;
import manager.STableManager; import manager.STableManager;
import manager.Table; import manager.Table;
import util.TimeUtils;
import util.CellUtil;
import util.MathUtils; import util.MathUtils;
import util.TimeUtils;
import java.util.*; import java.util.*;

View File

@ -169,7 +169,8 @@ public class ActivityLogic implements IEventHandler{
//检查开启的活动 非相对创角时间 //检查开启的活动 非相对创角时间
for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) {
int time = sGlobalActivity.getTime(); int time = sGlobalActivity.getTime();
ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); int id = sGlobalActivity.getId();
AbstractActivity activity = ActivityTypeEnum.getActicityById(id);
if (time == ActivityType.OPEN_TYPE_ROLE) { if (time == ActivityType.OPEN_TYPE_ROLE) {
continue; continue;
} }
@ -180,54 +181,52 @@ public class ActivityLogic implements IEventHandler{
long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2); long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, 2);
if (now < startTime) { if (now < startTime) {
//如果没到活动开启时间但是openActivityIds里有了这个活动证明是热更延迟开启的活动需要清除掉 //如果没到活动开启时间但是openActivityIds里有了这个活动证明是热更延迟开启的活动需要清除掉
openActivityIds.remove(sGlobalActivity.getId()); openActivityIds.remove(id);
continue; continue;
} }
// 开服条件判断 // 开服条件判断
boolean open = SGlobalActivity.checkActivityIfOpen(sGlobalActivity.getId(),0,GameApplication.serverConfig.getCacheOpenTime()); boolean open = SGlobalActivity.checkActivityIfOpen(id,0,GameApplication.serverConfig.getCacheOpenTime());
if (!open){ if (!open){
openActivityIds.remove(sGlobalActivity.getId()); openActivityIds.remove(id);
continue; continue;
} }
long gapEndTime = endTime+sGlobalActivity.getGapTime()*TimeUtils.DAY; long gapEndTime = endTime+sGlobalActivity.getGapTime()*TimeUtils.DAY;
if (endTime != 0 && now > endTime) { if (endTime != 0 && now > endTime) {
if (!openActivityIds.contains(sGlobalActivity.getId())) { if (!openActivityIds.contains(id)) {
if(now<gapEndTime){ if(now<gapEndTime){
openActivityIds.add(sGlobalActivity.getId()); openActivityIds.add(id);
} }
continue; continue;
} }
if(now>gapEndTime){ if(now>gapEndTime){
openActivityIds.remove(sGlobalActivity.getId()); openActivityIds.remove(id);
} }
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); if (null == activity) {
if (null == abstractActivity) {
continue; continue;
} }
//活動結束 預約的展示期間 //活動結束 預約的展示期間
if(now<gapEndTime){ if(now<gapEndTime){
GlobalSystemControl globalSystemControl = GlobalSystemControl.getGlobalSystemControl(); GlobalSystemControl globalSystemControl = GlobalSystemControl.getGlobalSystemControl();
HashMap<Integer, Long> activityPreMap = globalSystemControl.getActivityPreEnd(); HashMap<Integer, Long> activityPreMap = globalSystemControl.getActivityPreEnd();
if(activityPreMap.containsKey(sGlobalActivity.getId())){ if(activityPreMap.containsKey(id)){
if(activityPreMap.get(sGlobalActivity.getId())>=endTime && activityPreMap.get(sGlobalActivity.getId())<=gapEndTime){ if(activityPreMap.get(id)>=endTime && activityPreMap.get(id)<=gapEndTime){
continue; continue;
} }
} }
abstractActivity.onActivityPreEnd(); activity.onActivityPreEnd();
continue; continue;
} }
abstractActivity.onActivityEnd(); activity.onActivityEnd();
continue; continue;
} }
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(sGlobalActivity.getId()); if (null == activity) {
if (null == abstractActivity) {
continue; continue;
} }
if(openActivityIds.contains(sGlobalActivity.getId())) { if(openActivityIds.contains(id)) {
continue; continue;
} }
abstractActivity.onActivityStart(); activity.onActivityStart();
openActivityIds.add(sGlobalActivity.getId()); openActivityIds.add(id);
} }
//活动数据处理分发到角色线程 //活动数据处理分发到角色线程
InnerMessageUtil.broadcastWithRandom(user1 -> { InnerMessageUtil.broadcastWithRandom(user1 -> {
@ -270,6 +269,7 @@ public class ActivityLogic implements IEventHandler{
}, new LinkedList<>(OnlineUserManager.sessionMap.keySet()),2); }, new LinkedList<>(OnlineUserManager.sessionMap.keySet()),2);
} }
public void newPlayerOpenActivityMission(User user) throws Exception { public void newPlayerOpenActivityMission(User user) throws Exception {
checkActivityOfUser(user, null); checkActivityOfUser(user, null);
ISession session = OnlineUserManager.getSessionByUid(user.getId()); ISession session = OnlineUserManager.getSessionByUid(user.getId());
@ -364,31 +364,7 @@ public class ActivityLogic implements IEventHandler{
} }
ActivityMission activityMission = activityManager.getActivityMissionMap().get(openActivityId); ActivityMission activityMission = activityManager.getActivityMissionMap().get(openActivityId);
if (activityMission != null) { if (activityMission != null) {
if(openActivityId == ActivityType.RechargeTotal){ // 商店初始化
//首冲3天 -> 7天 容错
int chargeMoneyCount = 0;
List<SActivityRewardConfig> 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(); int[] shopId = sGlobalActivity.getShopId();
if (shopId != null && shopId.length > 0 && shopId[0] != 0) { if (shopId != null && shopId.length > 0 && shopId[0] != 0) {
boolean b = user.getStoreManager().getStoreInfoMap().containsKey(shopId[0]); boolean b = user.getStoreManager().getStoreInfoMap().containsKey(shopId[0]);
@ -399,17 +375,8 @@ public class ActivityLogic implements IEventHandler{
} }
continue; continue;
} }
initAllActivityMission(activityManager.getActivityMissionMap(),openActivityId); boolean checked = checkStateAndInitFromActivity(user, openActivityId);
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityById(openActivityId); if (checked){
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){
continue; continue;
} }
//非角色活动开启通知 //非角色活动开启通知
@ -417,7 +384,17 @@ public class ActivityLogic implements IEventHandler{
} }
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap(); Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { 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();
long startTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time, userCreateTime, 1);
long endTime = ToolsUtil.getTimeLong(startTimeLong, endTimeLong, time, userCreateTime, 2);
if(type == ActivityType.DAILY_PREFERENTIAL_GIFT){
continue; continue;
} }
int activityId = sGlobalActivity.getId(); int activityId = sGlobalActivity.getId();
@ -444,54 +421,59 @@ public class ActivityLogic implements IEventHandler{
} }
} else if (activityMissionMap.containsKey(activityId)) { } else if (activityMissionMap.containsKey(activityId)) {
//如果活动没有开启,但是玩家有这个活动的数据,则清除,并通知客户端活动关闭 //如果活动没有开启,但是玩家有这个活动的数据,则清除,并通知客户端活动关闭
long startTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 1);
if(TimeUtils.now() < startTime){ if(TimeUtils.now() < startTime){
LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId,sGlobalActivity.getType(),sGlobalActivity.getStartTimeLong()); LOGGER.info("[活动延期,清除遗留玩家数据] [uid:{}] [activityId:{}] [activityType:{}] [activityStartTime:{}]",user.getId(),activityId, type, startTimeLong);
activityMissionMap.remove(activityId); activityMissionMap.remove(activityId);
if (builder != null) { if (builder != null) {
builder.addCloseActivityId(activityId); builder.addCloseActivityId(activityId);
} }
} }
} }
int time = sGlobalActivity.getTime(); if (time == ActivityType.OPEN_TYPE_ROLE) {//创角
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);
if (now < startTime) { if (now < startTime) {
continue; continue;
} }
if (endTime != 0 && now > endTime) { if (endTime != 0 && now > endTime) {
goRewardActivity(user,activityId,builder,now>endTime+sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY); goRewardActivity(user,activityId,builder,now>endTime+ gapTime *TimeUtils.ONE_DAY);
continue; continue;
} }
ActivityMission activityMission = activityMissionMap.get(activityId); boolean checked = checkStateAndInitFromActivity(user, activityId);
if (activityMission != null) { if (checked){
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){
continue; continue;
} }
openNewActivityIds.add(activityId); openNewActivityIds.add(activityId);
}
} else { if (time == ActivityType.OPEN_TYPE_CYCLE){// 循环
long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),userCreateTime, 2); ActivityMission mission = activityMissionMap.get(activityId);
goRewardActivity(user,activityId,builder,now>endTime + sGlobalActivity.getGapTime()*TimeUtils.ONE_DAY); if (mission == null){
continue;
}
long creatTime = mission.getCreatTime();
if (creatTime >= endTimeLong){
checkStateAndInitFromActivity(user, activityId);
}
}
else {
goRewardActivity(user,activityId,builder,now>endTime + gapTime *TimeUtils.ONE_DAY);
} }
} }
return openNewActivityIds; return openNewActivityIds;
} }
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 { private static void goRewardActivity(User user,int activityId,PlayerInfoProto.ActivityUpateIndication.Builder builder,boolean isRemoveInfo) throws Exception {
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId);
if (activityMission != null) { if (activityMission != null) {

View File

@ -11,8 +11,8 @@ public interface ActivityType {
int OPEN_TYPE_TIME = 1; // 活动开启类型:绝对时间 int OPEN_TYPE_TIME = 1; // 活动开启类型:绝对时间
int OPEN_TYPE_ROLE = 2; // 活动开启类型:创角时间 int OPEN_TYPE_ROLE = 2; // 活动开启类型:创角时间
int OPEN_TYPE_SERVER = 3; // 活动开启类型:开服时间 int OPEN_TYPE_SERVER = 3; // 活动开启类型:开服时间
int OPEN_TYPE_MONTHS = 5; // 活动开启类型:开服自然月
int OPEN_TYPE_MONTHS = 5 ; // 活动开启类型:开服自然月 int OPEN_TYPE_CYCLE = 6; // 循环活动
int WILL_TAKE = 0; //未领取 int WILL_TAKE = 0; //未领取

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.logic.activity; package com.ljsd.jieling.logic.activity;
import com.ljsd.GameApplication;
import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo; import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.OnlineUserManager; 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.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler; import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler;
import com.ljsd.jieling.network.session.ISession; 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 manager.STableManager;
import rpc.protocols.CommonProto; import rpc.protocols.CommonProto;
import util.TimeUtils; import util.TimeUtils;
@ -49,6 +52,7 @@ public class ContinuousGiftActivity extends AbstractActivity {
// 初始化阶段奖励 // 初始化阶段奖励
ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>()); ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>());
user.getActivityManager().getActivityMissionMap().put(id, mission); user.getActivityManager().getActivityMissionMap().put(id, mission);
LOGGER.info("连续礼包活动初始化..."+id);
} }
@Override @Override
@ -74,7 +78,7 @@ public class ContinuousGiftActivity extends AbstractActivity {
* @param giftId * @param giftId
* @param missionMap * @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){ if (giftId < 0 || giftNum <= 0){
// 非礼包处理 // 非礼包处理
return; return;
@ -172,16 +176,18 @@ public class ContinuousGiftActivity extends AbstractActivity {
@Override @Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) { public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
long now = TimeUtils.now();
long start = getSrartTime();
long end = getEndTime();
// 验证活动是否开启
if (now < start || now > end){
return new ArrayList<>();
}
if (activityMission == null){ if (activityMission == null){
LOGGER.error("活动不存在数据库中id:{},uid:{}",id,user.getId());
return new ArrayList<>(); 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);
// 更新记录天数 // 更新记录天数
activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1); activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1);
// 库里存储的活动档位信息 // 库里存储的活动档位信息
@ -240,53 +246,13 @@ public class ContinuousGiftActivity extends AbstractActivity {
return true; 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 user
* @param boxId * @param boxId
* @return * @return
*/ */
private boolean checkBuyAgo(User user, int boxId){ public boolean checkBuyAgo(User user, int boxId){
// 获取消息 // 获取消息
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
SThemeActivityShop themes = STableManager.getConfig(SThemeActivityShop.class).get(boxId); SThemeActivityShop themes = STableManager.getConfig(SThemeActivityShop.class).get(boxId);

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.logic.activity; package com.ljsd.jieling.logic.activity;
import com.ljsd.GameApplication;
import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo; 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.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler; import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ToolsUtil;
import config.SGlobalActivity; import config.SGlobalActivity;
import config.SRechargeCommodityNewConfig; import config.SRechargeCommodityNewConfig;
import config.SSurpriseBox; import config.SSurpriseBox;
@ -78,7 +78,7 @@ public class SuperBoxActivity extends AbstractActivity {
* @param giftId * @param giftId
* @param missionMap * @param missionMap
*/ */
private void giftHandle(User user, int giftId){ public void giftHandle(User user, int giftId){
if (giftId < 0){ if (giftId < 0){
// 非礼包处理 // 非礼包处理
return; return;
@ -161,16 +161,18 @@ public class SuperBoxActivity extends AbstractActivity {
@Override @Override
public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) { public List<CommonProto.ActivityInfo.MissionInfo> getAllMissInfo(User user,ActivityMission activityMission, Set<Integer> filter) {
long now = TimeUtils.now();
long start = getSrartTime();
long end = getEndTime();
// 验证活动是否开启
if (now < start || now > end){
return new ArrayList<>();
}
if (activityMission == null){ if (activityMission == null){
LOGGER.error("活动不存在数据库中id:{},uid:{}",id,user.getId());
return new ArrayList<>(); 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);
// 更新记录天数 // 更新记录天数
activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1); activityMission.setV(TimeUtils.getSoFarWentDays(start, now)+1);
// 库里存储的活动档位信息 // 库里存储的活动档位信息
@ -229,53 +231,13 @@ public class SuperBoxActivity extends AbstractActivity {
return true; 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 user
* @param boxId * @param boxId
* @return * @return
*/ */
private boolean checkBuyAgo(User user, int boxId){ public boolean checkBuyAgo(User user, int boxId){
// 获取消息 // 获取消息
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap(); Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId); SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId);

View File

@ -1,23 +1,16 @@
package com.ljsd.jieling.logic.activity.activityLogic; package com.ljsd.jieling.logic.activity.activityLogic;
import com.ljsd.GameApplication;
import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.RechargeType;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler;
import com.ljsd.jieling.network.server.SessionManager;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.ToolsUtil;
import config.SGlobalActivity; import config.SGlobalActivity;
import config.SRechargeCommodityNewConfig;
import config.SWeekRewardConfig; import config.SWeekRewardConfig;
import config.SWeekcardConfig; import config.SWeekcardConfig;
import manager.STableManager; import manager.STableManager;
@ -43,37 +36,8 @@ public class WeekCardLogic {
public final static WeekCardLogic instance = new WeekCardLogic(); public final static WeekCardLogic instance = new WeekCardLogic();
} }
/**
*
* @return
*/
public long getStartTime(User user, int id){
long startTime = 0;
SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id);
// 绝对时间
if (activity.getTime() == ActivityType.OPEN_TYPE_TIME){
startTime = activity.getStartTimeLong();
}
// 开服时间
if (activity.getTime() == ActivityType.OPEN_TYPE_SERVER) {
String openTime = GameApplication.serverConfig.getOpenTime();
long timeLong2 = TimeUtils.stringToTimeLong2(openTime);
startTime = timeLong2 + activity.getStartTimeLong() * 1000;
}
// 创角时间
if (activity.getTime() == ActivityType.OPEN_TYPE_ROLE) {
long timeLong2 = user.getPlayerInfoManager().getCreateTime();
startTime = timeLong2 + activity.getStartTimeLong() * 1000;
}
return startTime;
}
/** /**
* *
* @param cardId
* @param activityId
* @param valueMap
* @return
*/ */
private CommonProto.WeekCardInfo packagingWeekCardBuilder(User user, int activityId, int cardId, Map<Integer,Integer> valueMap){ private CommonProto.WeekCardInfo packagingWeekCardBuilder(User user, int activityId, int cardId, Map<Integer,Integer> valueMap){
Map<Integer, SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class); Map<Integer, SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class);
@ -84,8 +48,10 @@ public class WeekCardLogic {
SWeekcardConfig sWeekcardConfig = config.get(cardId); SWeekcardConfig sWeekcardConfig = config.get(cardId);
ArrayList<CommonProto.WeekCardDay> list1 = new ArrayList<>(); ArrayList<CommonProto.WeekCardDay> list1 = new ArrayList<>();
SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(activityId);
long createTime = user.getPlayerInfoManager().getCreateTime();
// 计算间隔时间 // 计算间隔时间
long startTimeLong = getStartTime(user, activityId); long startTimeLong = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),createTime,1);
int days = TimeUtils.differentDays(startTimeLong, TimeUtils.now())+1; int days = TimeUtils.differentDays(startTimeLong, TimeUtils.now())+1;
for (int[] ints : sWeekcardConfig.getBaseRewardID()) { for (int[] ints : sWeekcardConfig.getBaseRewardID()) {

View File

@ -8,6 +8,7 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.exception.ErrorTableException;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityMission;
@ -1025,7 +1026,7 @@ public class BuyGoodsNewLogic {
RechargeHandler handler = getRechargeHandler(config.getOtype()); RechargeHandler handler = getRechargeHandler(config.getOtype());
AbstractWelfareBag bag = handler.getBag(user, goodsId); AbstractWelfareBag bag = handler.getBag(user, goodsId);
if (bag == null || !bag.isBuy()){ if (bag == null || !bag.isBuy()){
throw new ErrorCodeException(ErrorCode.SHOP_NO_ITEM); throw new ErrorTableException(104,"礼包已购买");
} }
//生成cp订单号 //生成cp订单号

View File

@ -13,36 +13,65 @@ public class ToolsUtil {
if(type == 2){ if(type == 2){
baseTime = endTimeLong; baseTime = endTimeLong;
} }
long startTime=0; long resultTime=0;
switch (time){ switch (time){
case ActivityType.OPEN_TYPE_TIME: case ActivityType.OPEN_TYPE_TIME:
startTime = baseTime; resultTime = baseTime;
break; break;
case ActivityType.OPEN_TYPE_ROLE: case ActivityType.OPEN_TYPE_ROLE:
startTime = TimeUtils.getAppointTimeInXDay(createUserTime,0) + baseTime*1000; resultTime = TimeUtils.getAppointTimeInXDay(createUserTime,0) + baseTime*1000;
break; break;
case ActivityType.OPEN_TYPE_SERVER: case ActivityType.OPEN_TYPE_SERVER:
long serverOpenTime = GameApplication.serverConfig.getCacheOpenTime(); long serverOpenTime = GameApplication.serverConfig.getCacheOpenTime();
startTime = serverOpenTime + baseTime*1000; resultTime = serverOpenTime + baseTime * 1000;
break; break;
case ActivityType.OPEN_TYPE_MONTHS: case ActivityType.OPEN_TYPE_MONTHS:
if(type == 1){ if(type == 1){
if(baseTime == 1){//第一个月 if(baseTime == 1){//第一个月
startTime = GameApplication.serverConfig.getCacheOpenTime(); resultTime = GameApplication.serverConfig.getCacheOpenTime();
}else{ }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(type == 2){
if(baseTime ==1){ if(baseTime ==1){
startTime = TimeUtils.getMonthEndTime(GameApplication.serverConfig.getCacheOpenTime()); resultTime = TimeUtils.getMonthEndTime(GameApplication.serverConfig.getCacheOpenTime());
}else{ }else{
startTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime); resultTime = TimeUtils.getMonthStartTime(GameApplication.serverConfig.getCacheOpenTime(),1,(int)baseTime);
} }
} }
break; break;
case ActivityType.OPEN_TYPE_CYCLE://循环活动
long now = TimeUtils.now();
// 未到开启时间
if (now >= startTimeLong) {
long timeLong = endTimeLong - startTimeLong;
while (endTimeLong < now){
endTimeLong += timeLong;
}
startTimeLong = endTimeLong - timeLong;
}
// 开始时间
if(type == 1){
resultTime = startTimeLong;
}
// 结束时间
if(type == 2){
resultTime = endTimeLong;
}
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){ public static long getEndTimeLong(long startTimeLong , long endTimeLong,int time,long createUserTime,int dayOut){