易经宝库道具回收

zhangshanxue 2020-11-17 16:59:04 +08:00
parent f303840402
commit 16ded73f10
3 changed files with 84 additions and 37 deletions

View File

@ -157,6 +157,7 @@ public interface BIReason {
int SPECIAL_MONSTER_REWARD = 88;//灵兽涅槃获得 int SPECIAL_MONSTER_REWARD = 88;//灵兽涅槃获得
int SPECIAL_FREE_PIECE_REWARD = 89;//灵兽放生获得 int SPECIAL_FREE_PIECE_REWARD = 89;//灵兽放生获得
int SKIN_USE_REWARD = 90;//激活皮肤获得头像 int SKIN_USE_REWARD = 90;//激活皮肤获得头像
int SUB_ACTIVITY_FINISH = 91;//易经宝库活动结束补发
int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级 int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级
int SECRETBOX_CONSUME = 1001;//秘盒抽卡 int SECRETBOX_CONSUME = 1001;//秘盒抽卡
@ -293,4 +294,5 @@ public interface BIReason {
int SKIN_USE_CONSUME = 1073;//激活皮肤消耗 int SKIN_USE_CONSUME = 1073;//激活皮肤消耗
int SUB_ACTIVITY_CONSUME = 1074;//易经宝库 int SUB_ACTIVITY_CONSUME = 1074;//易经宝库
int SUB_ACTIVITY_CONSUME_FINISH = 1075;//易经宝库活动结束补发消耗
} }

View File

@ -3,10 +3,13 @@ package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.jbean.*; import com.ljsd.jieling.jbean.*;
import com.ljsd.jieling.logic.activity.event.IEvent; import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.dao.Item;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.PlayerInfoProto; import com.ljsd.jieling.protocols.PlayerInfoProto;
@ -15,6 +18,7 @@ import com.ljsd.jieling.util.MessageUtil;
import config.*; import config.*;
import manager.STableManager; import manager.STableManager;
import util.MathUtils; import util.MathUtils;
import util.TimeUtils;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -28,33 +32,34 @@ public class SubActivity extends AbstractActivity {
public static final int LAY_INDEX = 100; public static final int LAY_INDEX = 100;
public static final int POOL_INDEX = 1000; public static final int POOL_INDEX = 1000;
public SubActivity(int id) { public SubActivity(int id) {
super(id); super(id);
} }
@Override @Override
public void initActivity(User user)throws Exception{ public void initActivity(User user) throws Exception {
//重置奖励 //重置奖励
randomReward(user,true); randomReward(user, true);
} }
@Override @Override
public void onResume(User user) throws Exception { public void onResume(User user) throws Exception {
// super.onResume(user); // super.onResume(user);
//重置奖励 //重置奖励
randomReward(user,false); randomReward(user, false);
} }
@Override @Override
public boolean takeReward(ISession session, int missionId) throws Exception { public boolean takeReward(ISession session, int missionId) throws Exception {
User user = UserManager.getUser(session.getUid()); User user = UserManager.getUser(session.getUid());
// //checkAndUpdate state // //checkAndUpdate state
ActivityManager activityManager = user.getActivityManager(); ActivityManager activityManager = user.getActivityManager();
ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); ActivityMission activityMission = activityManager.getActivityMissionMap().get(id);
if (activityMission == null){ if (activityMission == null) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
} }
if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) { if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) {
@ -65,49 +70,52 @@ public class SubActivity extends AbstractActivity {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
} }
//check had select //check had select
if(activityMission.getV()==0){ if (activityMission.getV() == 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
} }
SBlessingConfigNew sBlessingConfigNew =SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id);
//check cost //check cost
int integerValue = SSpecialConfig.getIntegerValue(SSpecialConfig.EXPEDITION_REBORN);
if(integerValue==0){
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int[][] cost = new int[1][2]; int[][] cost = new int[1][2];
cost[0]=sBlessingConfigNew.getCost(); cost[0] = sBlessingConfigNew.getCost();
boolean b = ItemUtil.itemCost(user, cost, BIReason.SUB_ACTIVITY_CONSUME, 1); boolean b = ItemUtil.itemCost(user, cost, BIReason.SUB_ACTIVITY_CONSUME, 1);
if(!b){ if (!b) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
} }
int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size(); int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size();
if(size==0){ if (size == 0) {
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); throw new ErrorCodeException(ErrorCode.SERVER_DEFINE);
} }
//get reward //get reward
long count = activityMission.getActivityMissionMap().values().stream().filter(activityProgressInfo1 -> activityProgressInfo1.getState() == ActivityType.HAD_TAKED).count(); 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().add((int) count, activityMission.getV());
user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().remove(user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size() - 1);
}
Integer rewardId = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().get((int) count); Integer rewardId = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().get((int) count);
SBlessingRewardPoolNew sBlessingRewardPoolNew = STableManager.getConfig(SBlessingRewardPoolNew.class).get(rewardId); SBlessingRewardPoolNew sBlessingRewardPoolNew = STableManager.getConfig(SBlessingRewardPoolNew.class).get(rewardId);
int[] reward = sBlessingRewardPoolNew.getReward(); int[] reward = sBlessingRewardPoolNew.getReward();
int[][] rewards = new int[1][]; int[][] rewards = new int[1][];
rewards[0]=reward; rewards[0] = reward;
CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards, BIReason.TAKE_ACTIVITY_REWARD); CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards, BIReason.TAKE_ACTIVITY_REWARD);
//up miss //up miss
activityProgressInfo.setProgrss(rewardId); activityProgressInfo.setProgrss(rewardId);
activityProgressInfo.setState( ActivityType.HAD_TAKED); activityProgressInfo.setState(ActivityType.HAD_TAKED);
int curLay = user.getActivityManager().getSubRewardPoolInfo().getLay(); int curLay = user.getActivityManager().getSubRewardPoolInfo().getLay();
if(curLay!=sBlessingConfigNew.getFloorCount()&&count==(size-1)){ if (curLay != sBlessingConfigNew.getFloorCount() && rewardId == activityMission.getV()) {
ActivityLogic.getInstance().resumeActivity(user, ActivityType.SUB_ACTIVITY); ActivityLogic.getInstance().resumeActivity(user, ActivityType.SUB_ACTIVITY);
sendActivityProgress(session, activityManager.getActivityMissionMap().get(id), null); sendActivityProgress(session, activityManager.getActivityMissionMap().get(id), null);
}else { } else {
sendActivityProgress(session, activityMission, Collections.singleton(missionId)); sendActivityProgress(session, activityMission, Collections.singleton(missionId));
} }
reportTakeActivityReward(user,rewards,missionId); reportTakeActivityReward(user, rewards, missionId);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
@ -123,16 +131,16 @@ public class SubActivity extends AbstractActivity {
/** /**
* *
*/ */
private void randomReward(User user,boolean start) throws Exception{ private void randomReward(User user, boolean start) throws Exception {
//init lay //init lay
SubRewardPoolInfo subRewardPoolInfo = user.getActivityManager().getSubRewardPoolInfo(); SubRewardPoolInfo subRewardPoolInfo = user.getActivityManager().getSubRewardPoolInfo();
if(subRewardPoolInfo==null){ if (subRewardPoolInfo == null) {
subRewardPoolInfo = new SubRewardPoolInfo(); subRewardPoolInfo = new SubRewardPoolInfo();
user.getActivityManager().setSubRewardPoolInfo(subRewardPoolInfo); user.getActivityManager().setSubRewardPoolInfo(subRewardPoolInfo);
} }
int lay = user.getActivityManager().getSubRewardPoolInfo().getLay(); int lay = user.getActivityManager().getSubRewardPoolInfo().getLay();
int curLay=lay+1; int curLay = lay + 1;
user.getActivityManager().getSubRewardPoolInfo().setLay(curLay); user.getActivityManager().getSubRewardPoolInfo().setLay(curLay);
HashMap<Integer, HashSet<SBlessingRewardPoolNew>> integerHashSetHashMap = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap(); HashMap<Integer, HashSet<SBlessingRewardPoolNew>> integerHashSetHashMap = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap();
//init Activity //init Activity
@ -149,24 +157,24 @@ public class SubActivity extends AbstractActivity {
//init reward //init reward
SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id);
if(null== sBlessingConfigNew){ if (null == sBlessingConfigNew) {
throw new ErrorCodeException(ErrorCode.CFG_NULL); throw new ErrorCodeException(ErrorCode.CFG_NULL);
} }
int[] basicPoolId = sBlessingConfigNew.getBasicPoolId(); int[] basicPoolId = sBlessingConfigNew.getBasicPoolId();
if(basicPoolId.length<curLay){ if (basicPoolId.length < curLay) {
throw new ErrorCodeException(ErrorCode.CFG_NULL); throw new ErrorCodeException(ErrorCode.CFG_NULL);
} }
int poolID = basicPoolId[curLay-1]; int poolID = basicPoolId[curLay - 1];
HashSet<SBlessingRewardPoolNew> sBlessingRewardPoolNews = integerHashSetHashMap.get(poolID); HashSet<SBlessingRewardPoolNew> sBlessingRewardPoolNews = integerHashSetHashMap.get(poolID);
if(null == sBlessingRewardPoolNews){ if (null == sBlessingRewardPoolNews) {
throw new ErrorCodeException(ErrorCode.CFG_NULL); throw new ErrorCodeException(ErrorCode.CFG_NULL);
} }
List<int[]> ints = new LinkedList<>(); List<int[]> ints = new LinkedList<>();
for (SBlessingRewardPoolNew sBlessingRewardPoolNew:sBlessingRewardPoolNews) { for (SBlessingRewardPoolNew sBlessingRewardPoolNew : sBlessingRewardPoolNews) {
for (int i = 0; i <sBlessingRewardPoolNew.getInitializeNum() ; i++) { for (int i = 0; i < sBlessingRewardPoolNew.getInitializeNum(); i++) {
int[] reward= new int[2]; int[] reward = new int[2];
reward[0]=sBlessingRewardPoolNew.getId(); reward[0] = sBlessingRewardPoolNew.getId();
reward[1]=sBlessingRewardPoolNew.getInitializeNum(); reward[1] = sBlessingRewardPoolNew.getInitializeNum();
ints.add(reward); ints.add(reward);
} }
@ -179,26 +187,62 @@ public class SubActivity extends AbstractActivity {
user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().clear(); user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().clear();
user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().addAll(list2); user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().addAll(list2);
for (int i = 0; i <=list2.size() ; i++) { for (int i = 0; i <= list2.size(); i++) {
ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo(); ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo();
activityProgressInfo1.setProgrss(0); activityProgressInfo1.setProgrss(0);
activityProgressInfo1.setState(0); activityProgressInfo1.setState(0);
activityMission.getActivityMissionMap().put(i+1, activityProgressInfo1); activityMission.getActivityMissionMap().put(i + 1, activityProgressInfo1);
} }
//init finalRewards //init finalRewards
if(start){ if (start) {
int finalPoolId = sBlessingConfigNew.getFinalPoolId(); int finalPoolId = sBlessingConfigNew.getFinalPoolId();
HashSet<SBlessingRewardPoolNew> sBlessingRewardPoolNews1 = integerHashSetHashMap.get(finalPoolId); HashSet<SBlessingRewardPoolNew> sBlessingRewardPoolNews1 = integerHashSetHashMap.get(finalPoolId);
for (SBlessingRewardPoolNew sBlessingRewardPoolNew:sBlessingRewardPoolNews1) { for (SBlessingRewardPoolNew sBlessingRewardPoolNew : sBlessingRewardPoolNews1) {
ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo(); ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo();
activityProgressInfo1.setProgrss(0); activityProgressInfo1.setProgrss(0);
activityProgressInfo1.setState(0); activityProgressInfo1.setState(0);
activityMission.getActivityMissionMap().put(POOL_INDEX+sBlessingRewardPoolNew.getId(), activityProgressInfo1); activityMission.getActivityMissionMap().put(POOL_INDEX + sBlessingRewardPoolNew.getId(), activityProgressInfo1);
} }
} }
} }
@Override
public void onActivityEndOnMySelf(User user) throws Exception {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id);
int removeItemId = sBlessingConfigNew.getCost()[0];
Item item = user.getItemManager().getItem(removeItemId);
if (item != null) {
int costNum = item.getItemNum();
//check cost
int[][] cost = new int[1][];
cost[0] = new int[]{item.getItemId(), item.getItemNum()};
ItemUtil.itemCost(user, cost, BIReason.SUB_ACTIVITY_CONSUME_FINISH, sGlobalActivity.getId());
SItem sItem = SItem.getsItemMap().get(removeItemId);
//give
int integerValue = SSpecialConfig.getIntegerValue(SSpecialConfig.ITEM_1004_RETRIEVE);
if (integerValue == 0) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int[][] rewards = new int[1][];
rewards[0] = new int[]{16, costNum*integerValue};
SItem getItem = SItem.getsItemMap().get(16);
String getName =costNum*integerValue+getItem.getName();
String title = SErrorCodeEerverConfig.getI18NMessage("activity_item_retrieve_mail_titile");
String content = SErrorCodeEerverConfig.getI18NMessage("activity_item_retrieve_mail_content", new Object[]{sGlobalActivity.getSesc(),sItem.getName(),costNum,getName});
String mailReward = ItemUtil.getMailReward(rewards);
int nowTime = (int) (TimeUtils.now() / 1000);
MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME);
}
}
} }

View File

@ -83,6 +83,7 @@ public class SSpecialConfig implements BaseConfig {
public static final String DISCOUNT_MAIN = "discount_main";//关卡礼包 public static final String DISCOUNT_MAIN = "discount_main";//关卡礼包
public static final String ANIMAL_BROADCAST_QUALITY = "animal_broadcast_quality"; public static final String ANIMAL_BROADCAST_QUALITY = "animal_broadcast_quality";
public static final String ITEM_1004_RETRIEVE = "item_1004_retrieve";// 结算补发道具16 # 50
@Override @Override
public void init() throws Exception { public void init() throws Exception {