diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java index 968e66a67..3dd948f33 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -256,9 +256,12 @@ public class GlobleSystemLogic implements IEventHandler { // Map worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class); LOGGER.info("跨服开始分组"); + // 周一零点时间戳,毫秒 long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true); - lastHour+=TimeUtils.WEEK; - int expireTime =(int)(lastHour-TimeUtils.nowInt()); + // 加上七天,秒 + lastHour = (lastHour + TimeUtils.WEEK)/1000; + // 当前时间 + long expireTime = lastHour-TimeUtils.nowInt(); redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60); //提前两分钟结算 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 4e0bb8265..6dc0ba274 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 @@ -1718,9 +1718,9 @@ public class ActivityLogic implements IEventHandler{ CommonProto.Drop.Builder drop = null; int[] markReward = new int[]{0,0}; - int[][] markRewards = new int[num][]; -// int[][] markRewards = new int[num+1][]; -// markRewards[num] = setting.getRecruit(); +// int[][] markRewards = new int[num][]; + int[][] markRewards = new int[num+1][]; + markRewards[num] = new int[]{setting.getRecruit()[0],num}; // 单抽 if (num == 1){ // 验证免费特权 @@ -1733,7 +1733,7 @@ public class ActivityLogic implements IEventHandler{ // 消费抽取 if (drop == null){ // 十连抽还是单抽消耗物品获取 - int[][] item = type == 1?setting.getCostItemSingle():setting.getCostItemMul(); + int[][] item = num == 1?setting.getCostItemSingle():setting.getCostItemMul(); // 验证道具消耗 int[][] cost = new int[][]{{item[0][0],item[0][1]}}; boolean itemCost = ItemUtil.itemCost(user, cost, BIReason.CHOICE_DRAW_CARD, 0); @@ -1807,12 +1807,27 @@ public class ActivityLogic implements IEventHandler{ * @param num * @return * @throws Exception + * 暂时不用了 */ private CommonProto.Drop.Builder getDrawReward(User user,int activityId,int num,int[][] reward) throws Exception { + if (num == 1){ + return getDrawRewardOne(user,activityId,num,reward); + }else { + return getDrawRewardTen(user,activityId,num,reward); + } + } + + /** + * 心愿 获取奖励 + * @param user + * @param activityId + * @param num + * @return + * @throws Exception + */ + private CommonProto.Drop.Builder getDrawRewardOne(User user,int activityId,int num,int[][] reward) throws Exception { // 活动信息 ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId); - // 累计得抽奖次数 - int count = mission.getV(); // up奖励id int upRewardId = mission.getChoiceRewardIdByActivity(activityId); // 根据活动获取本期得全部up信息 @@ -1823,47 +1838,30 @@ public class ActivityLogic implements IEventHandler{ int camp = incs[4]; // 排序权重map Map weight = new TreeMap<>(SWishActivityPool.weight.get(camp)); - // 常驻卡池 - Map poolMap = SWishActivityPool.map; // 将up奖励id得权重加入到整个卡池权重中 weight.put(-1,incs[2]); // 计算总权重 int totalWeight = weight.values().stream().mapToInt(Integer::intValue).sum(); - int i = 0; - // 根据抽奖次数循环 - while (i < num){ - // 已抽奖次数+1 - count++; + for (int i = 0; i < 1; i++) { // 随机数 int randomInt = MathUtils.randomInt(totalWeight); -// LOGGER.error("心愿抽奖,总权重:{},随机值:{},权重区间:{}-{},当前次数:{}",totalWeight,randomInt,totalWeight-incs[2],totalWeight,count); // up奖励信息 int[] result = new int[]{incs[0],incs[1]}; - // 抽奖次数达到必出up次数 - if (count >= incs[3]){ - // 次数归0 - count = 0; - // 添加奖励 - reward[i++] = result; - continue; - } - // 权重循环 for (Map.Entry entry : weight.entrySet()) { // 随机值小于等于当前次数权重,证明抽到了 if (randomInt <= entry.getValue()){ // 根据id获取奖池信息 - SWishActivityPool pool = poolMap.get(entry.getKey()); + SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey()); // null意味着是up奖励 if (pool == null){ - count = 0; - reward[i++] = result; + reward[i] = result; } // 非up奖励 else { - reward[i++] = pool.getItemId(); + reward[i] = pool.getItemId(); } break; } @@ -1871,9 +1869,61 @@ public class ActivityLogic implements IEventHandler{ randomInt -= entry.getValue(); } } + // 返回奖励信息 + return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD); + } - // 更新抽奖次数和up奖励id - mission.setV(count); + /** + * 心愿 获取奖励 + * @param user + * @param activityId + * @param num + * @return + * @throws Exception + */ + private CommonProto.Drop.Builder getDrawRewardTen(User user,int activityId,int num,int[][] reward) throws Exception { + // 活动信息 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId); + // up奖励id + int upRewardId = mission.getChoiceRewardIdByActivity(activityId); + // 根据活动获取本期得全部up信息 + int[] incs = SWishActivityUp.upMap.getOrDefault(activityId,new HashMap<>()).get(upRewardId); + if (incs == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"WishActivityUp查询不到活动:" + activityId + ",或奖励id:" + upRewardId); + } + //拿到当前阵营 + int camp = incs[4]; + // 排序权重map + Map weight = new TreeMap<>(SWishActivityPool.weight.get(camp)); + // 计算总权重 + int totalWeight = weight.values().stream().mapToInt(Integer::intValue).sum(); + + // 固定5次给碎片 + int[] ints = {0,1,2,3,4,5,6,7,8,9}; + List random = MathUtils.randomForOneArray(ints, 5); + + for (int i = 0; i < 10; i++) { + // 随机位置给碎片 + if (random.contains(i)){ + reward[i] = new int[]{incs[0],incs[1]}; + continue; + } + + // 随机数 + int randomInt = MathUtils.randomInt(totalWeight); + // 权重循环 + for (Map.Entry entry : weight.entrySet()) { + // 随机值小于等于当前次数权重,证明抽到了 + if (randomInt <= entry.getValue()){ + // 根据id获取奖池信息 + SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey()); + reward[i] = pool.getItemId(); + break; + } + // 未抽到, 减去当前次数权重 + randomInt -= entry.getValue(); + } + } // 返回奖励信息 return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD); } 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 c146a758b..5060bbe2c 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 @@ -2,12 +2,14 @@ package com.ljsd.jieling.logic.activity.activityLogic; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.WeekCardInfo; 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.MessageUtil; +import com.ljsd.jieling.util.ToolsUtil; import config.SErrorCodeEerverConfig; import config.SWeekcardConfig; import config.SWeekcardRotationConfig; @@ -25,65 +27,61 @@ public class WeekCardLogic { public WeekCardLogic() { } - public static class Instance { - public final static WeekCardLogic instance = new WeekCardLogic(); - } - public static WeekCardLogic getInstance() { return WeekCardLogic.Instance.instance; } - public void sendWeekCardInitInfo(ISession session)throws Exception{ + public void sendWeekCardInitInfo(ISession session) throws Exception { ActivityProto.WeekCardIndicationInfoResponse.Builder res = ActivityProto.WeekCardIndicationInfoResponse.newBuilder(); User user = UserManager.getUser(session.getUid()); - List weekCardList = initAllWeekCardInfo(user); + List weekCardList = initAllWeekCardInfo(user); res.addAllAllWeekCardInfo(weekCardList); //MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse, res.build(), true); - MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse_VALUE,res.build(),true); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse_VALUE, res.build(), true); } - public void sendWeekCardRewardMail(ISession session)throws Exception{ + public void sendWeekCardRewardMail(ISession session) throws Exception { //发每周未领取的奖励 User user = UserManager.getUser(session.getUid()); Map weekCard = user.getPlayerInfoManager().getWeekCard(); - MapdropMap = new HashMap<>(); + Map dropMap = new HashMap<>(); boolean isSave = false; - for(WeekCardInfo weekCardVal:weekCard.values()){ + for (WeekCardInfo weekCardVal : weekCard.values()) { Map config = STableManager.getConfig(SWeekcardConfig.class); - if(!config.containsKey(weekCardVal.getId())){ + if (!config.containsKey(weekCardVal.getId())) { continue; } - if(!weekCardVal.isBuy()){ + if (!weekCardVal.isBuy()) { continue; } - if(TimeUtils.isSameWeek7(weekCardVal.getBugTime())){ - continue; + if (TimeUtils.isSameWeek7(weekCardVal.getBugTime())) { + continue; } - if(Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays()>0){ - for(int i= (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays());i>0;i--){ - int [][]drop =config.get(weekCardVal.getId()).getBaseReward(); - for(int[] single:drop){ - if(dropMap.containsKey(single[0])){ - dropMap.put(single[0],dropMap.get(single[0])+single[1]); - }else{ - dropMap.put(single[0],single[1]); + if (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays() > 0) { + for (int i = (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays()); i > 0; i--) { + int[][] drop = config.get(weekCardVal.getId()).getBaseReward(); + for (int[] single : drop) { + if (dropMap.containsKey(single[0])) { + dropMap.put(single[0], dropMap.get(single[0]) + single[1]); + } else { + dropMap.put(single[0], single[1]); } } } weekCardVal.setBuy(false); weekCardVal.setBugTime(0); - isSave =true; - }else{ + isSave = true; + } else { weekCardVal.setBuy(false); weekCardVal.setBugTime(0); isSave = true; } } - if(isSave){ + if (isSave) { user.getPlayerInfoManager().setWeekCard(weekCard); } - if(dropMap.size()>0){ - int [][] dropArray= dropMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}).toArray(int[][]::new); + if (dropMap.size() > 0) { + int[][] dropArray = dropMap.entrySet().stream().map(n -> new int[]{n.getKey(), n.getValue()}).toArray(int[][]::new); String title = SErrorCodeEerverConfig.getI18NMessage("WeekcardReward_mail_title"); String content = SErrorCodeEerverConfig.getI18NMessage("WeekcardReward_mail_txt"); // 排行奖励 @@ -92,70 +90,69 @@ public class WeekCardLogic { } } - public List initAllWeekCardInfo(User user) throws Exception{ - long time= user.getPlayerInfoManager().getWeekCardTimeFirst(); - if(!TimeUtils.isSameWeek7(time)){ + public List initAllWeekCardInfo(User user) throws Exception { + long time = user.getPlayerInfoManager().getWeekCardTimeFirst(); + if (!TimeUtils.isSameWeek7(time)) { user.getPlayerInfoManager().setWeekCardTimeFirstLevel(user.getPlayerInfoManager().getLevel()); user.getPlayerInfoManager().setWeekCardTimeFirst(TimeUtils.now()); } - int [] weekCardType = getWeekCardType(user); + int[] weekCardType = getWeekCardType(user); Map weekCard = user.getPlayerInfoManager().getWeekCard(); - Map config = STableManager.getConfig(SWeekcardRotationConfig.class); - boolean isSaveToDb =false; - List weekCardList=new ArrayList<>(); - if(weekCardType == null || weekCardType.length ==0){ + Map config = STableManager.getConfig(SWeekcardRotationConfig.class); + boolean isSaveToDb = false; + List weekCardList = new ArrayList<>(); + if (weekCardType == null || weekCardType.length == 0) { return weekCardList; } - for(int i= 1;i weekCard = user.getPlayerInfoManager().getWeekCard(); int[] weekType = WeekCardLogic.getInstance().getWeekCardType(user); - if(weekType == null){ + if (weekType == null) { return; } //根据礼包id 找出此时开卖的周卡id int id = 0; - Map config = STableManager.getConfig(SWeekcardConfig.class); - for(int i=1;i config = STableManager.getConfig(SWeekcardConfig.class); + for (int i = 1; i < weekType.length; i++) { + if (config.containsKey(weekType[i])) { + if (config.get(weekType[i]).getRechargeId() == weekCardType) { + id = config.get(weekType[i]).getId(); + break; } } } - if(id == 0){ + if (id == 0) { return; } - if(!weekCard.containsKey(id)){ + if (!weekCard.containsKey(id)) { return; } WeekCardInfo singleWeekCard = weekCard.get(id); @@ -165,32 +162,43 @@ public class WeekCardLogic { user.getPlayerInfoManager().setWeekCard(weekCard); } - public int[] getWeekCardType(User user) throws Exception{ + public int[] getWeekCardType(User user) throws Exception { Map config = STableManager.getConfig(SWeekcardRotationConfig.class); - for(SWeekcardRotationConfig con:config.values()){ - if( TimeUtils.now()>=TimeUtils.parseTimeToMiles(con.getStartTime(),TimeUtils.Stand_CeHua_Data_format) - && TimeUtils.now()<=TimeUtils.parseTimeToMiles(con.getEndtime(),TimeUtils.Stand_CeHua_Data_format)){ - int [][]cardType = con.getWeekcardType(); - int level= user.getPlayerInfoManager().getWeekCardTimeFirstLevel(); - if(level == 0){ - level = user.getPlayerInfoManager().getLevel(); + for (SWeekcardRotationConfig con : config.values()) { + if (con.getTime() == ActivityType.OPEN_TYPE_ROLE) { + long userCreateTime = user.getPlayerInfoManager().getCreateTime(); + long startTime = ToolsUtil.getTimeLong(Long.parseLong(con.getStartTime()), Long.parseLong(con.getEndtime()), con.getTime(), userCreateTime, 1); + long endTime = ToolsUtil.getTimeLong(Long.parseLong(con.getStartTime()), Long.parseLong(con.getEndtime()), con.getTime(), userCreateTime, 2); + if (TimeUtils.now() >= startTime && TimeUtils.now() <= endTime) { + return con.getWeekcardType()[0]; } - if(cardType.length>1){ - if(level>=cardType[0][0]&&level<=cardType[1][0]){ - return cardType[0]; - }else { - return cardType[1]; + } + if (con.getTime() == ActivityType.OPEN_TYPE_TIME) { + if (TimeUtils.now() >= TimeUtils.parseTimeToMiles(con.getStartTime(), TimeUtils.Stand_CeHua_Data_format) + && TimeUtils.now() <= TimeUtils.parseTimeToMiles(con.getEndtime(), TimeUtils.Stand_CeHua_Data_format)) { + int[][] cardType = con.getWeekcardType(); + int level = user.getPlayerInfoManager().getWeekCardTimeFirstLevel(); + if (level == 0) { + level = user.getPlayerInfoManager().getLevel(); + } + if (cardType.length > 1) { + if (level >= cardType[0][0] && level <= cardType[1][0]) { + return cardType[0]; + } else { + return cardType[1]; + } + } else { + return cardType[0]; } - }else { - return cardType[0]; } } } return null; } - - + public static class Instance { + public final static WeekCardLogic instance = new WeekCardLogic(); + } }