挖矿问题修改

master_ob2
PC-202302260912\Administrator 2023-09-21 15:42:21 +08:00
parent bb6795b755
commit 556a03e3ed
2 changed files with 60 additions and 53 deletions

View File

@ -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;
}
}

View File

@ -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();
// get reward
long count = treeMap.entrySet().stream().filter(v -> v.getKey() < 36 && v.getValue().getState() == ActivityType.HAD_TAKED).count();
// 后5个概率提前结束抽奖
if (count != (size - 1) && count >= (size - 5) && ((Math.random() * 5) < 1)&& subRewardPool.get(subRewardPool.size() - 1)== activityMission.getV()) {
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);
}
// 消耗道具
@ -167,7 +167,8 @@ public class SubActivity extends AbstractActivity {
return takeAllReward(session, missionId);
}
ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId);
Map<Integer, ActivityProgressInfo> progressInfoMap = activityMission.getActivityMissionMap();
ActivityProgressInfo activityProgressInfo = progressInfoMap.get(missionId);
if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
@ -182,7 +183,8 @@ public class SubActivity extends AbstractActivity {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size();
List<Integer> subRewardPool = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool();
int size = subRewardPool.size();
if (size == 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
}
@ -190,20 +192,18 @@ public class SubActivity extends AbstractActivity {
// 易经宝库翻牌子
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();
long count = progressInfoMap.entrySet().stream().filter(v -> v.getKey() < 36 && v.getValue().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);
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);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[][]{reward}, BIReason.TAKE_ACTIVITY_REWARD);
// up miss
activityProgressInfo.setProgrss(rewardId);
activityProgressInfo.setState(ActivityType.HAD_TAKED);
@ -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<Integer, HashSet<SBlessingRewardPoolNew>> 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<Integer, HashSet<SBlessingRewardPoolNew>> rewardPool = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap();
int poolID = basicPoolId[curLay - 1];
HashSet<SBlessingRewardPoolNew> sBlessingRewardPoolNews = integerHashSetHashMap.get(poolID);
HashSet<SBlessingRewardPoolNew> 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<Integer, ActivityProgressInfo> 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<int[]> 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<Integer> 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<SBlessingRewardPoolNew> 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<SBlessingRewardPoolNew> 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);
}
}
}