From 16ded73f10e50800013f8822dd658630ae90af89 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Tue, 17 Nov 2020 16:59:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=93=E7=BB=8F=E5=AE=9D=E5=BA=93=E9=81=93?= =?UTF-8?q?=E5=85=B7=E5=9B=9E=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/globals/BIReason.java | 2 + .../jieling/logic/activity/SubActivity.java | 118 ++++++++++++------ .../src/main/java/config/SSpecialConfig.java | 1 + 3 files changed, 84 insertions(+), 37 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 785355f21..fb16b7d59 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -157,6 +157,7 @@ public interface BIReason { int SPECIAL_MONSTER_REWARD = 88;//灵兽涅槃获得 int SPECIAL_FREE_PIECE_REWARD = 89;//灵兽放生获得 int SKIN_USE_REWARD = 90;//激活皮肤获得头像 + int SUB_ACTIVITY_FINISH = 91;//易经宝库活动结束补发 int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级 int SECRETBOX_CONSUME = 1001;//秘盒抽卡 @@ -293,4 +294,5 @@ public interface BIReason { int SKIN_USE_CONSUME = 1073;//激活皮肤消耗 int SUB_ACTIVITY_CONSUME = 1074;//易经宝库 + int SUB_ACTIVITY_CONSUME_FINISH = 1075;//易经宝库活动结束补发消耗 } \ No newline at end of file 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 28bc7fde8..19e931c9c 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 @@ -3,10 +3,13 @@ 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.globals.Global; import com.ljsd.jieling.jbean.*; 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.root.User; +import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.PlayerInfoProto; @@ -15,6 +18,7 @@ import com.ljsd.jieling.util.MessageUtil; import config.*; import manager.STableManager; import util.MathUtils; +import util.TimeUtils; import java.util.*; 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 POOL_INDEX = 1000; + public SubActivity(int id) { super(id); } @Override - public void initActivity(User user)throws Exception{ + public void initActivity(User user) throws Exception { //重置奖励 - randomReward(user,true); + randomReward(user, true); } @Override public void onResume(User user) throws Exception { - // super.onResume(user); + // super.onResume(user); //重置奖励 - randomReward(user,false); + randomReward(user, false); } @Override public boolean takeReward(ISession session, int missionId) throws Exception { - User user = UserManager.getUser(session.getUid()); + User user = UserManager.getUser(session.getUid()); // //checkAndUpdate state ActivityManager activityManager = user.getActivityManager(); ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); - if (activityMission == null){ + if (activityMission == null) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) { @@ -65,49 +70,52 @@ public class SubActivity extends AbstractActivity { throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); } //check had select - if(activityMission.getV()==0){ + if (activityMission.getV() == 0) { throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); } - SBlessingConfigNew sBlessingConfigNew =SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); + SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); //check cost - int integerValue = SSpecialConfig.getIntegerValue(SSpecialConfig.EXPEDITION_REBORN); - if(integerValue==0){ - throw new ErrorCodeException(ErrorCode.CFG_NULL); - } 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); - if(!b){ + if (!b) { throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } int size = user.getActivityManager().getSubRewardPoolInfo().getSubRewardPool().size(); - if(size==0){ + if (size == 0) { throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); } //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().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); + SBlessingRewardPoolNew sBlessingRewardPoolNew = STableManager.getConfig(SBlessingRewardPoolNew.class).get(rewardId); int[] reward = sBlessingRewardPoolNew.getReward(); int[][] rewards = new int[1][]; - rewards[0]=reward; + rewards[0] = reward; CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards, BIReason.TAKE_ACTIVITY_REWARD); //up miss activityProgressInfo.setProgrss(rewardId); - activityProgressInfo.setState( ActivityType.HAD_TAKED); + activityProgressInfo.setState(ActivityType.HAD_TAKED); 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); sendActivityProgress(session, activityManager.getActivityMissionMap().get(id), null); - }else { + } else { sendActivityProgress(session, activityMission, Collections.singleton(missionId)); } - reportTakeActivityReward(user,rewards,missionId); + reportTakeActivityReward(user, rewards, missionId); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); 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 SubRewardPoolInfo subRewardPoolInfo = user.getActivityManager().getSubRewardPoolInfo(); - if(subRewardPoolInfo==null){ + if (subRewardPoolInfo == null) { subRewardPoolInfo = new SubRewardPoolInfo(); user.getActivityManager().setSubRewardPoolInfo(subRewardPoolInfo); } int lay = user.getActivityManager().getSubRewardPoolInfo().getLay(); - int curLay=lay+1; + int curLay = lay + 1; user.getActivityManager().getSubRewardPoolInfo().setLay(curLay); HashMap> integerHashSetHashMap = SBlessingRewardPoolNew.getsBlessingRewardPoolNewHashMap(); //init Activity @@ -149,24 +157,24 @@ public class SubActivity extends AbstractActivity { //init reward SBlessingConfigNew sBlessingConfigNew = SBlessingConfigNew.getsBlessingConfigNewHashMap().get(id); - if(null== sBlessingConfigNew){ + if (null == sBlessingConfigNew) { throw new ErrorCodeException(ErrorCode.CFG_NULL); } int[] basicPoolId = sBlessingConfigNew.getBasicPoolId(); - if(basicPoolId.length sBlessingRewardPoolNews = integerHashSetHashMap.get(poolID); - if(null == sBlessingRewardPoolNews){ + if (null == sBlessingRewardPoolNews) { throw new ErrorCodeException(ErrorCode.CFG_NULL); } List ints = new LinkedList<>(); - for (SBlessingRewardPoolNew sBlessingRewardPoolNew:sBlessingRewardPoolNews) { - for (int i = 0; i sBlessingRewardPoolNews1 = integerHashSetHashMap.get(finalPoolId); - for (SBlessingRewardPoolNew sBlessingRewardPoolNew:sBlessingRewardPoolNews1) { + for (SBlessingRewardPoolNew sBlessingRewardPoolNew : sBlessingRewardPoolNews1) { ActivityProgressInfo activityProgressInfo1 = new ActivityProgressInfo(); activityProgressInfo1.setProgrss(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); + } + + } } diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 8b23324fe..bb7a32596 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -83,6 +83,7 @@ public class SSpecialConfig implements BaseConfig { public static final String DISCOUNT_MAIN = "discount_main";//关卡礼包 public static final String ANIMAL_BROADCAST_QUALITY = "animal_broadcast_quality"; + public static final String ITEM_1004_RETRIEVE = "item_1004_retrieve";// 结算补发道具16 # 50 @Override public void init() throws Exception {