From 1f9d9736e61c0ea66cd29197789ef480e9e6bcdf Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 24 May 2022 11:34:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E4=BB=99=E6=8B=9B=E5=8B=9F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E5=8E=BB=E9=99=A4=E8=80=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/logic/activity/ActivityLogic.java | 96 +++++++++++++++---- 1 file changed, 75 insertions(+), 21 deletions(-) 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 9a085526b..dfe88fc06 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 @@ -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,8 +1838,6 @@ 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]); // 计算总权重 @@ -1833,32 +1846,19 @@ public class ActivityLogic implements IEventHandler{ int i = 0; // 根据抽奖次数循环 while (i < num){ - // 已抽奖次数+1 - count++; // 随机数 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; } // 非up奖励 @@ -1871,9 +1871,63 @@ 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); + + int i = 0; + // 根据抽奖次数循环 + while (i < 10){ + // 随机位置给碎片 + 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(); + } + // 未抽到, 减去当前次数权重 + randomInt -= entry.getValue(); + } + } // 返回奖励信息 return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD); }