云梦祈福多期

lvxinran 2019-12-17 00:09:13 +08:00
parent 3c0f236e4d
commit f16a71e03f
6 changed files with 166 additions and 114 deletions

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.handler.activity;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.handler.activity;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.activity.AbstractActivity;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
@ -17,6 +18,8 @@ public class BlessInfoHandler extends BaseHandler {
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
///
ActivityLogic.getInstance().blessInfo(iSession,MessageTypeProto.MessageType.BLESS_INFO_RESPONSE);
}
}

View File

@ -27,5 +27,7 @@ public class BlessSaveRewardHandler extends BaseHandler {
info[i] = rewardIdsList.get(i);
}
ActivityLogic.getInstance().blessSaveOptionalReward(iSession,info,MessageTypeProto.MessageType.BLESS_SAVE_REWARD_RESPONSE);
////
}
}

View File

@ -702,10 +702,129 @@ public class ActivityLogic {
}
private int getBlessActivityId(User user){
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
for(Integer activityId:activityMissionMap.keySet()){
if(SGlobalActivity.getsGlobalActivityMap().get(activityId).getType()==ActivityType.BLESSACTIVITY){
return activityId;
}
}
return 0;
}
/**
*
*
* @param session
* @param locationId
* @param messageType
* @throws Exception
*/
public void blessChoose(ISession session, int locationId, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int blessActivityId = getBlessActivityId(user);
if(blessActivityId==0){
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(blessActivityId);
if (activityMission == null) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityProgressInfoMap();
if (activityProgressInfoMap.get(locationId + BlessInfoConfig.START_CAPACITY).getProgrss() != 0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("已经抽过改格子"));
}
int resultRewardId = 0;
if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() == -1) {
Map<Integer, SBlessingRewardPool> poolMap = STableManager.getConfig(SBlessingRewardPool.class);
int[][] result = new int[BlessInfoConfig.START_CAPACITY][];
int index = 0;
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
int[] temp = new int[2];
temp[0] = entry.getValue().getProgrss();
temp[1] = poolMap.get(entry.getValue().getProgrss()).getExtractWeight();
result[index] = temp;
index++;
}
int[] order = MathUtils.randomFromWeightWithTaking(result, BlessInfoConfig.START_CAPACITY);
for (int i = 0; i < order.length; i++) {
LOGGER.info("获取顺序{}", order[i]);
}
index = 0;
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
ActivityProgressInfo progress = new ActivityProgressInfo();
progress.setProgrss(order[index]);
activityMission.updateProgressInfo(entry.getKey(), progress);
index++;
}
activityMission.updateProgressInfo(BlessInfoConfig.BLESS_PROGRESS_STATUS, new ActivityProgressInfo(1, 0));
}
//检验消耗道具
int[][] costConfig = SBlessingConfig.blessingConfigMap.get(blessActivityId).getCost();
int[][] cost = new int[1][];
int[] temp = new int[2];
temp[0] = costConfig[0][0];
temp[1] = (int) MathUtils.calABX(activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss(), costConfig[1]);
cost[0] = temp;
LOGGER.info("本次为第{}次抽取,消耗{}个数为{}", activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss(), temp[0], temp[1]);
boolean costResult = ItemUtil.itemCost(user, cost, BIReason.BLESS_CHOOSE_CONSUME, 1);
if (!costResult) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() > 0) {
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
if (entry.getValue().getProgrss() == 0) {
continue;
}
resultRewardId = entry.getValue().getProgrss();
ActivityProgressInfo progress = new ActivityProgressInfo();
progress.setProgrss(entry.getValue().getProgrss());
activityMission.updateProgressInfo(locationId + BlessInfoConfig.START_CAPACITY, progress);
activityMission.updateProgressInfo(entry.getKey(), new ActivityProgressInfo());
break;
}
}
LOGGER.info("本次抽取的Id为{}", resultRewardId);
Map<Integer, SBlessingRewardPool> poolMap = STableManager.getConfig(SBlessingRewardPool.class);
int[][] dropItem = new int[1][];
for (Integer count : SBlessingConfig.blessingConfigMap.get(blessActivityId).getCounts()) {
if (count != activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss()) {
continue;
}
dropItem = new int[2][];
dropItem[1] = poolMap.get(activityProgressInfoMap.get(BlessInfoConfig.COUNT_REWARD_START_ID + count).getProgrss()).getReward();
break;
}
int[] reward = poolMap.get(resultRewardId).getReward();
dropItem[0] = reward;
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, dropItem, BIReason.BLESS_REWARD);
activityMission.updateProgressInfo(BlessInfoConfig.BLESS_PROGRESS_STATUS, new ActivityProgressInfo(activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() + 1, 0));
// if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() == BlessInfoConfig.START_CAPACITY + 1) {
// if (SBlessingConfig.sBlessingConfig.getIsRefresh() != 0) {
// blessRefresh(user);
// }
// }
PlayerInfoProto.blessChooseResponse response = PlayerInfoProto.blessChooseResponse.newBuilder().setReward(drop).setChooseRewardId(resultRewardId).build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true);
}
//云梦请求数据
public void blessInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(SBlessingConfig.sBlessingConfig.getActivityId());
int blessActivityId = getBlessActivityId(user);
if(blessActivityId==0){
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(blessActivityId);
if (activityMission == null) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
@ -813,11 +932,24 @@ public class ActivityLogic {
public void blessSaveOptionalReward(ISession session, int[] rewardIds, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(SBlessingConfig.sBlessingConfig.getActivityId());
// for(Map.Entry<Integer,SBlessingConfig> entry:SBlessingConfig.blessingConfigMap.entrySet()){
//
// int activityOpenState = getActivityOpenState(user, entry.getKey());
// if(activityOpenState==ActivityType.OPEN_STATE){
// blessingConfig = entry.getValue();
// continue;
// }
// }
int blessActivityId = getBlessActivityId(user);
if(blessActivityId==0){
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
SBlessingConfig blessingConfig =SBlessingConfig.blessingConfigMap.get(blessActivityId) ;
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(blessActivityId);
if (activityMission.getActivityProgressInfoMap().get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() != 0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("您当前不能进行保存"));
}
if (SBlessingConfig.sBlessingConfig.getRandomNum() != BlessInfoConfig.START_CAPACITY - rewardIds.length) {
if (blessingConfig.getRandomNum() != BlessInfoConfig.START_CAPACITY - rewardIds.length) {
throw new ErrorCodeException(ErrorCode.newDefineCode("选择数量不对"));
}
for (int i = 0; i < rewardIds.length; i++) {
@ -833,108 +965,6 @@ public class ActivityLogic {
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true);
}
/**
*
*
* @param session
* @param locationId
* @param messageType
* @throws Exception
*/
public void blessChoose(ISession session, int locationId, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(SBlessingConfig.sBlessingConfig.getActivityId());
if (activityMission == null) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
}
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityProgressInfoMap();
if (activityProgressInfoMap.get(locationId + BlessInfoConfig.START_CAPACITY).getProgrss() != 0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("已经抽过改格子"));
}
int resultRewardId = 0;
if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() == -1) {
Map<Integer, SBlessingRewardPool> poolMap = STableManager.getConfig(SBlessingRewardPool.class);
int[][] result = new int[BlessInfoConfig.START_CAPACITY][];
int index = 0;
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
int[] temp = new int[2];
temp[0] = entry.getValue().getProgrss();
temp[1] = poolMap.get(entry.getValue().getProgrss()).getExtractWeight();
result[index] = temp;
index++;
}
int[] order = MathUtils.randomFromWeightWithTaking(result, BlessInfoConfig.START_CAPACITY);
for (int i = 0; i < order.length; i++) {
LOGGER.info("获取顺序{}", order[i]);
}
index = 0;
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
ActivityProgressInfo progress = new ActivityProgressInfo();
progress.setProgrss(order[index]);
activityMission.updateProgressInfo(entry.getKey(), progress);
index++;
}
activityMission.updateProgressInfo(BlessInfoConfig.BLESS_PROGRESS_STATUS, new ActivityProgressInfo(1, 0));
}
//检验消耗道具
int[][] costConfig = SBlessingConfig.sBlessingConfig.getCost();
int[][] cost = new int[1][];
int[] temp = new int[2];
temp[0] = costConfig[0][0];
temp[1] = (int) MathUtils.calABX(activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss(), costConfig[1]);
cost[0] = temp;
LOGGER.info("本次为第{}次抽取,消耗{}个数为{}", activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss(), temp[0], temp[1]);
boolean costResult = ItemUtil.itemCost(user, cost, BIReason.BLESS_CHOOSE_CONSUME, 1);
if (!costResult) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() > 0) {
for (Map.Entry<Integer, ActivityProgressInfo> entry : activityProgressInfoMap.entrySet()) {
if (entry.getKey() > BlessInfoConfig.START_CAPACITY) {
continue;
}
if (entry.getValue().getProgrss() == 0) {
continue;
}
resultRewardId = entry.getValue().getProgrss();
ActivityProgressInfo progress = new ActivityProgressInfo();
progress.setProgrss(entry.getValue().getProgrss());
activityMission.updateProgressInfo(locationId + BlessInfoConfig.START_CAPACITY, progress);
activityMission.updateProgressInfo(entry.getKey(), new ActivityProgressInfo());
break;
}
}
LOGGER.info("本次抽取的Id为{}", resultRewardId);
Map<Integer, SBlessingRewardPool> poolMap = STableManager.getConfig(SBlessingRewardPool.class);
int[][] dropItem = new int[1][];
for (Integer count : SBlessingConfig.sBlessingConfig.getCounts()) {
if (count != activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss()) {
continue;
}
dropItem = new int[2][];
dropItem[1] = poolMap.get(activityProgressInfoMap.get(BlessInfoConfig.COUNT_REWARD_START_ID + count).getProgrss()).getReward();
break;
}
int[] reward = poolMap.get(resultRewardId).getReward();
dropItem[0] = reward;
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, dropItem, BIReason.BLESS_REWARD);
activityMission.updateProgressInfo(BlessInfoConfig.BLESS_PROGRESS_STATUS, new ActivityProgressInfo(activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() + 1, 0));
// if (activityProgressInfoMap.get(BlessInfoConfig.BLESS_PROGRESS_STATUS).getProgrss() == BlessInfoConfig.START_CAPACITY + 1) {
// if (SBlessingConfig.sBlessingConfig.getIsRefresh() != 0) {
// blessRefresh(user);
// }
// }
PlayerInfoProto.blessChooseResponse response = PlayerInfoProto.blessChooseResponse.newBuilder().setReward(drop).setChooseRewardId(resultRewardId).build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true);
}
// /**
// * 云梦手动刷新
// *

View File

@ -22,7 +22,7 @@ public interface ActivityType {
int FirstRecharge = 4; //首充
int RechargeTotal = 5; //累计充值
int GrowthFund = 6; //成长基金
int BLESSACTIVITY = 7;
int BLESSACTIVITY = 7;//云梦祈福
int TREASURE = 8; //孙龙的宝藏
int LUCKYCAT = 9;//招財貓
int SERVERHAPPY = 10; //七日狂欢

View File

@ -1,11 +1,23 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.handler.activity.BlessInfoConfig;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.ActivityManager;
import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SBlessingConfig;
import config.SBlessingRewardPool;
import config.SGlobalActivity;
@ -39,17 +51,21 @@ public class BlessActivity extends AbstractActivity {
* @return
*/
private ActivityMission blessInfoInit(ActivityManager activityManager, int activityId) {
SBlessingConfig sBlessingConfig = SBlessingConfig.blessingConfigMap.get(activityId);
if(sBlessingConfig==null){
return null;
}
//第一次9种
int fixRewardPool = SBlessingConfig.sBlessingConfig.getRandomPoolId();
int fixRewardNum = SBlessingConfig.sBlessingConfig.getRandomNum();
int fixRewardPool = sBlessingConfig.getRandomPoolId();
int fixRewardNum = sBlessingConfig.getRandomNum();
List<int[]> fixRewardArray = new ArrayList<>();
//第二次6,6种
int legendPool = SBlessingConfig.sBlessingConfig.getLegendPoolId();
int legendNum = SBlessingConfig.sBlessingConfig.getLegendNum();
int legendPool = sBlessingConfig.getLegendPoolId();
int legendNum = sBlessingConfig.getLegendNum();
List<int[]> legendRewardArray = new ArrayList<>();
int supremePool = SBlessingConfig.sBlessingConfig.getSupremePoolId();
int supremeNum = SBlessingConfig.sBlessingConfig.getSupremeNum();
int supremePool = sBlessingConfig.getSupremePoolId();
int supremeNum = sBlessingConfig.getSupremeNum();
List<int[]> supremeRewardArray = new ArrayList<>();
for (Map.Entry<Integer, SBlessingRewardPool> entry : STableManager.getConfig(SBlessingRewardPool.class).entrySet()) {
@ -62,8 +78,8 @@ public class BlessActivity extends AbstractActivity {
}
}
//第三次次数奖励6个
int[] countPool = SBlessingConfig.sBlessingConfig.getCopuntsPoolId();
int[] counts = SBlessingConfig.sBlessingConfig.getCounts();
int[] countPool = sBlessingConfig.getCopuntsPoolId();
int[] counts = sBlessingConfig.getCounts();
int[] countResult = new int[counts.length];
int countIndex = 0;
for (Integer cpool : countPool) {