diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sublay.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sublay.java index 6b75aa02b..fec86c3db 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sublay.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sublay.java @@ -1,5 +1,7 @@ package com.ljsd.jieling.kefu; +import com.ljsd.jieling.logic.activity.ActivityLogic; +import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.dao.root.User; /** * @Author hj @@ -13,6 +15,7 @@ public class Cmd_sublay extends GmRoleAbstract{ int anInt = Integer.parseInt(args[0]); User user = getUser(); user.getActivityManager().getSubRewardPoolInfo().setLay(anInt); + ActivityLogic.getInstance().resumeActivity(user, ActivityType.SUB_ACTIVITY); return true; } } 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 5e3ddef1b..6dad54b21 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 @@ -52,7 +52,6 @@ public class SubActivity extends AbstractActivity { @Override public void onResume(User user) throws Exception { - // super.onResume(user); //重置奖励 randomReward(user, false); } @@ -100,9 +99,10 @@ public class SubActivity extends AbstractActivity { costItemNum--; break; } - long count = activityMission.getActivityMissionMap().values().stream().filter(info -> info.getState() == ActivityType.HAD_TAKED).count(); - //后5个概率提前结束抽奖 - if (count != (size - 1) && count >= (size - 5) && ((Math.random() * 5) < 1)&& subRewardPool.get(subRewardPool.size() - 1)== activityMission.getV()) { + // get reward + long count = treeMap.entrySet().stream().filter(v -> v.getKey() < 36 && v.getValue().getState() == ActivityType.HAD_TAKED).count(); + // 后5个概率提前结束抽奖 + if (count >= (size - 5) && Math.random() < 0.2 && subRewardPool.get(subRewardPool.size() - 1) == activityMission.getV()) { subRewardPool.add((int) count, activityMission.getV()); subRewardPool.remove(subRewardPool.size() - 1); } @@ -126,7 +126,7 @@ public class SubActivity extends AbstractActivity { costItemNum++; } - if (costItemNum <= 0 || rewardList.size() == 0){ + if (costItemNum <= 0 || rewardList.isEmpty()){ throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } // 消耗道具 @@ -157,23 +157,24 @@ public class SubActivity extends AbstractActivity { if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) { throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); } - //check had select + // check had select if (activityMission.getV() == 0) { throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); } // 一键领取 - if (missionId == -1){ - return takeAllReward(session,missionId); + if (missionId == -1) { + return takeAllReward(session, missionId); } - ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId); + Map progressInfoMap = activityMission.getActivityMissionMap(); + ActivityProgressInfo activityProgressInfo = progressInfoMap.get(missionId); if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) { throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); } SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); - //check cost + // check cost int[][] cost = new int[1][2]; cost[0] = sBlessingConfigNew.getCost(); @@ -182,29 +183,28 @@ public class SubActivity extends AbstractActivity { throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } - int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size(); + List subRewardPool = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool(); + int size = subRewardPool.size(); if (size == 0) { throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); } - //易经宝库翻牌子 - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME,MissionType.SUB_ACTIVITY,1); - //get reward - long count = activityMission.getActivityMissionMap().values().stream().filter(activityProgressInfo1 -> activityProgressInfo1.getState() == ActivityType.HAD_TAKED).count(); - //后5个概率提前结束抽奖 - if (count != (size - 1) && count >= (size - 5) && ((Math.random() * 5) < 1)&&user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().get(user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size() - 1)== activityMission.getV()) { - user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().add((int) count, activityMission.getV()); - user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().remove(user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size() - 1); + // 易经宝库翻牌子 + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.SUB_ACTIVITY, 1); + // get reward + long count = progressInfoMap.entrySet().stream().filter(v -> v.getKey() < 36 && v.getValue().getState() == ActivityType.HAD_TAKED).count(); + // 后5个概率提前结束抽奖 + if (count >= (size - 5) && Math.random() < 0.2 && subRewardPool.get(subRewardPool.size() - 1) == activityMission.getV()) { + subRewardPool.add((int) count, activityMission.getV()); + subRewardPool.remove(subRewardPool.size() - 1); } - Integer rewardId = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().get((int) count); + Integer rewardId = subRewardPool.get((int) count); SBlessingRewardPoolNew sBlessingRewardPoolNew = STableManager.getConfig(SBlessingRewardPoolNew.class).get(rewardId); int[] reward = sBlessingRewardPoolNew.getReward(); - int[][] rewards = new int[1][]; - rewards[0] = reward; - CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards, BIReason.TAKE_ACTIVITY_REWARD); - //up miss + CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[][]{reward}, BIReason.TAKE_ACTIVITY_REWARD); + // up miss activityProgressInfo.setProgrss(rewardId); activityProgressInfo.setState(ActivityType.HAD_TAKED); int curLay = user.getActivityManager().getSubRewardPoolInfo().getLay(); @@ -214,7 +214,7 @@ public class SubActivity extends AbstractActivity { } else { sendActivityProgress(session, Collections.singleton(missionId)); } - reportTakeActivityReward(user, rewards, missionId); + reportTakeActivityReward(user, new int[][]{reward}, missionId); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); @@ -233,44 +233,49 @@ public class SubActivity extends AbstractActivity { private void randomReward(User user, boolean start) throws Exception { //init lay - SubRewardPoolInfo subRewardPoolInfo = user.getActivityManager().getSubRewardPoolInfo(); - if (subRewardPoolInfo == null) { - subRewardPoolInfo = new SubRewardPoolInfo(); - user.getActivityManager().setSubRewardPoolInfo(subRewardPoolInfo); + SubRewardPoolInfo poolInfo = user.getActivityManager().getSubRewardPoolInfo(); + if (poolInfo == null) { + poolInfo = new SubRewardPoolInfo(); + user.getActivityManager().setSubRewardPoolInfo(poolInfo); } + SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); if (null == sBlessingConfigNew) { throw new ErrorCodeException(ErrorCode.CFG_NULL); } - int lay = user.getActivityManager().getSubRewardPoolInfo().getLay(); + int lay = poolInfo.getLay(); int curLay = lay + 1; if (curLay > sBlessingConfigNew.getFloorCount()){ throw new ErrorCodeException(ErrorCode.CFG_NULL,"已达到最高等级"); } - user.getActivityManager().getSubRewardPoolInfo().setLay(curLay); - HashMap> integerHashSetHashMap = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap(); - //init Activity - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); - activityProgressInfo.setProgrss(curLay); - activityProgressInfo.setState(0); - activityMission.getActivityMissionMap().put(LAY_INDEX, activityProgressInfo); - activityMission.setOpenType(1); - activityMission.setActivityState(ActivityType.OPEN_STATE); - activityMission.setV(0); - //init reward int[] basicPoolId = sBlessingConfigNew.getBasicPoolId(); if (basicPoolId.length < curLay) { throw new ErrorCodeException(ErrorCode.CFG_NULL); } + + HashMap> rewardPool = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap(); int poolID = basicPoolId[curLay - 1]; - HashSet sBlessingRewardPoolNews = integerHashSetHashMap.get(poolID); + HashSet sBlessingRewardPoolNews = rewardPool.get(poolID); if (null == sBlessingRewardPoolNews) { throw new ErrorCodeException(ErrorCode.CFG_NULL); } + + poolInfo.setLay(curLay); + + //init Activity + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + Map progressInfoMap = activityMission.getActivityMissionMap(); + ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); + activityProgressInfo.setProgrss(curLay); + activityProgressInfo.setState(0); + progressInfoMap.put(LAY_INDEX, activityProgressInfo); + activityMission.setOpenType(1); + activityMission.setActivityState(ActivityType.OPEN_STATE); + activityMission.setV(0); + List ints = new LinkedList<>(); for (SBlessingRewardPoolNew sBlessingRewardPoolNew : sBlessingRewardPoolNews) { for (int i = 0; i < sBlessingRewardPoolNew.getInitializeNum(); i++) { @@ -279,32 +284,31 @@ public class SubActivity extends AbstractActivity { reward[1] = sBlessingRewardPoolNew.getInitializeNum(); ints.add(reward); } - } int[][] ints1 = ints.toArray(new int[0][0]); int[] fixResult = MathUtils.randomFromWeightWithTaking(ints1, ints1.length); List list2 = Arrays.stream(fixResult).boxed().collect(Collectors.toList()); - user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().clear(); - user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().addAll(list2); + poolInfo.getSubRewardPool().clear(); + poolInfo.getSubRewardPool().addAll(list2); for (int i = 0; i <= list2.size(); i++) { ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo(); activityProgressInfo1.setProgrss(0); activityProgressInfo1.setState(0); - activityMission.getActivityMissionMap().put(i + 1, activityProgressInfo1); + progressInfoMap.put(i + 1, activityProgressInfo1); } //init finalRewards if (start) { int finalPoolId = sBlessingConfigNew.getFinalPoolId(); - HashSet sBlessingRewardPoolNews1 = integerHashSetHashMap.get(finalPoolId); - for (SBlessingRewardPoolNew sBlessingRewardPoolNew : sBlessingRewardPoolNews1) { - ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo(); - activityProgressInfo1.setProgrss(0); - activityProgressInfo1.setState(0); - activityMission.getActivityMissionMap().put(POOL_INDEX + sBlessingRewardPoolNew.getId(), activityProgressInfo1); + HashSet rewardPoolNews = rewardPool.get(finalPoolId); + for (SBlessingRewardPoolNew poolNew : rewardPoolNews) { + ActivityProgressInfo info = new ActivityProgressInfo(); + info.setProgrss(0); + info.setState(0); + progressInfoMap.put(POOL_INDEX + poolNew.getId(), info); } } }