【易经宝库增加一键挖宝】

back_recharge
duhui 2022-06-20 14:21:28 +08:00
parent 8848cadbd5
commit 3b3fe2878f
2 changed files with 111 additions and 14 deletions

View File

@ -4,7 +4,10 @@ import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.*;
import com.ljsd.jieling.jbean.ActivityManager;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.jbean.SubRewardPoolInfo;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.dao.Item;
import com.ljsd.jieling.logic.dao.UserManager;
@ -12,12 +15,12 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.*;
import manager.STableManager;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import util.MathUtils;
import util.TimeUtils;
@ -56,13 +59,102 @@ public class SubActivity extends AbstractActivity {
randomReward(user, false);
}
/**
*
* @param session
* @param missionId -1
* @return
* @throws Exception
*/
public boolean takeAllReward(ISession session, int missionId) throws Exception {
User user = UserManager.getUser(session.getUid());
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id);
Map<Integer, ActivityProgressInfo> activityMissionMap = activityMission.getActivityMissionMap();
List<Integer> subRewardPool = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool();
// 奖励列表
ArrayList<int[][]> rewardList = new ArrayList<>();
SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id);
Map<Integer, SBlessingRewardPoolNew> poolNewMap = STableManager.getConfig(SBlessingRewardPoolNew.class);
// 数据排序并过滤非挖矿奖励id
Map<Integer, ActivityProgressInfo> treeMap = activityMissionMap.entrySet().stream().filter(k -> k.getKey() < 100).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
TreeMap<Integer, ActivityProgressInfo> collect = new TreeMap<>(treeMap);
// 消耗的数量
int costItemNum = 1;
int costItemId = sBlessingConfigNew.getCost()[0];
for (Map.Entry<Integer, ActivityProgressInfo> value : collect.entrySet()) {
ActivityProgressInfo progressInfo = value.getValue();
// 已领取的格子直接过滤
if (progressInfo.getState() == ActivityType.HAD_TAKED || value.getKey() >= 100){
continue;
}
// 校验消耗
HashMap<Integer, Integer> costMap = new HashMap<>();
costMap.put(costItemId,costItemNum);
boolean checkCost = ItemUtil.checkCost(user, costMap);
if (!checkCost) {
costItemNum--;
break;
}
//get reward
int size = subRewardPool.size();
if (size == 0) {
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()) {
subRewardPool.add((int) count, activityMission.getV());
subRewardPool.remove(subRewardPool.size() - 1);
}
// 奖励
Integer rewardId = subRewardPool.get((int) count);
SBlessingRewardPoolNew sBlessingRewardPoolNew = poolNewMap.get(rewardId);
rewardList.add(new int[][]{sBlessingRewardPoolNew.getReward()});
// mongodb update
progressInfo.setProgrss(rewardId);
progressInfo.setState(ActivityType.HAD_TAKED);
activityMissionMap.put(value.getKey(),progressInfo);
// 是否挖到了最终奖励
int curLay = user.getActivityManager().getSubRewardPoolInfo().getLay();
if (curLay != sBlessingConfigNew.getFloorCount() && rewardId == activityMission.getV()) {
ActivityLogic.getInstance().resumeActivity(user, ActivityType.SUB_ACTIVITY);
break;
}
costItemNum++;
}
if (costItemNum <= 0 || rewardList.size() <= 0){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
// 消耗道具
ItemUtil.itemCost(user, new int[][]{{costItemId,costItemNum}}, BIReason.SUB_ACTIVITY_CONSUME, 0);
// 获得奖励
CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewardList, BIReason.TAKE_ACTIVITY_REWARD);
//任务,易经宝库翻牌子
user.getUserMissionManager().onGameEvent(user, GameEvent.SUB_ACTIVITY,costItemNum);
// 领奖协议返回
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
// 推送
sendActivityProgress(session, activityMission, null);
// 打点上报
reportTakeActivityReward(user, rewardList, missionId);
return true;
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception {
User user = UserManager.getUser(session.getUid());
// //checkAndUpdate state
ActivityManager activityManager = user.getActivityManager();
// check state
ActivityMission activityMission = activityManager.getActivityMissionMap().get(id);
if (activityMission == null) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
@ -70,15 +162,20 @@ public class SubActivity extends AbstractActivity {
if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId);
if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
//check had select
if (activityMission.getV() == 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
}
// 一键领取
if (missionId == -1){
return takeAllReward(session,missionId);
}
ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId);
if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id);
//check cost
@ -89,6 +186,7 @@ public class SubActivity extends AbstractActivity {
if (!b) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size();
if (size == 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
@ -107,7 +205,6 @@ public class SubActivity extends AbstractActivity {
SBlessingRewardPoolNew sBlessingRewardPoolNew = STableManager.getConfig(SBlessingRewardPoolNew.class).get(rewardId);
int[] reward = sBlessingRewardPoolNew.getReward();
int[][] rewards = new int[1][];
rewards[0] = reward;

View File

@ -22,7 +22,10 @@ import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.activity.event.GuildForceChangeEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SaveHeroForceEvent;
import com.ljsd.jieling.logic.activity.event.UserForceChangeEvent;
import com.ljsd.jieling.logic.activity.eventhandler.UserForceUpEventHandler;
import com.ljsd.jieling.logic.dao.Pokemon;
import com.ljsd.jieling.logic.dao.PropertyItem;
@ -45,7 +48,6 @@ import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo;
import com.ljsd.jieling.logic.mission.main.ServenMissionIdsType;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.newRechargeInfo.NewRechargeInfo;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler;
@ -53,7 +55,6 @@ import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.*;
import com.ljsd.jieling.thrift.pool.ClientAdapterPo;
import com.ljsd.jieling.util.*;
import com.mongodb.Mongo;
import config.*;
import manager.STableManager;
import org.slf4j.Logger;
@ -64,7 +65,6 @@ import rpc.protocols.PlayerInfoProto;
import util.MathUtils;
import util.TimeUtils;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;