From 8e37bd922c7e27148077e1316c558d49af5799d8 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 27 May 2021 16:10:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=9B=E6=B0=94=E5=86=B2=E5=A4=A9,=20?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=BB=93=E6=9D=9F=E5=8F=91=E9=80=81=E6=9C=AA?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/activity/AbstractActivity.java | 2 +- .../logic/activity/CowFlySkyActivity.java | 50 ++++++++++++++++--- .../mission/main/AbstractMissionType.java | 33 ++++++++++-- .../mission/main/CowFlySkyMissionType.java | 5 ++ 4 files changed, 78 insertions(+), 12 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index f20049408..2c2b9d6e4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -171,7 +171,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); return true; } - protected void reportTakeActivityReward(User user, int[][] reward, int missionId) throws Exception { + protected void reportTakeActivityReward(User user, int[][] reward, int missionId) throws Exception { List itemId = new ArrayList<>(reward.length); List itemNum = new ArrayList<>(reward.length); Arrays.stream(reward).forEach(n->{itemId.add(n[0]);itemNum.add(n[1]);}); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java index 442dc8bac..e57ffa285 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java @@ -3,25 +3,29 @@ 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.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; 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.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.main.CowFlySkyMissionType; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; import config.SActivityRewardConfig; import config.SArroGantFly; +import config.SErrorCodeEerverConfig; import config.SGlobalActivity; import manager.STableManager; import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; public class CowFlySkyActivity extends AbstractActivity { @@ -65,7 +69,7 @@ public class CowFlySkyActivity extends AbstractActivity { } // 是否满足领取条件值 - if (!checkValue(user,config.getValues())) { + if (!takeRewardsProcess(session,config,progressInfo)) { LOGGER.error("the uid={} the misionId={},the missionProgress={},the require is={} ", session.getUid(), config.getId(), progressInfo.getProgrss(), config.getValues()); throw new ErrorCodeException(ErrorCode.newDefineCode("未达到领取条件")); } @@ -84,9 +88,12 @@ public class CowFlySkyActivity extends AbstractActivity { return true; } - private boolean checkValue(User user,int[][] value){ - Item item = user.getItemManager().getItem(value[0][0]); - return item.getItemNum() >= value[1][0]; + @Override + boolean takeRewardsProcess(ISession session, SActivityRewardConfig sActivityRewardConfig, ActivityProgressInfo activityProgressInfo) throws Exception { + User user = UserManager.getUser(session.getUid()); + int[][] values = sActivityRewardConfig.getValues(); + Long num = Optional.ofNullable(user.getItemManager().getItem(values[0][0])).map(Item::getItemNum).orElse(0L); + return num >= values[1][0]; } @Override @@ -104,6 +111,33 @@ public class CowFlySkyActivity extends AbstractActivity { @Override public void onActivityEndDealReward(User user) throws Exception { LOGGER.info("牛气冲天活动结束,发送未领取奖励..........."); - super.onActivityEndDealReward(user); + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + if (session == null){ + return; + } + takeAllReward(session); + } + + @Override + void takeAllReward(ISession session) throws Exception { + User user = UserManager.getUser(session.getUid()); + List itemArrs = new LinkedList<>(); + // 活动奖励 + getAllMissRewards(user, session, itemArrs); + // 任务奖励 + user.getUserMissionManager().getCowFlySkyMissionType().getAllRewards(itemArrs); + + if (itemArrs.size() == 0){ + return; + } + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (null == sGlobalActivity) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + String title = SErrorCodeEerverConfig.getI18NMessageNeedConvert("receive_activity_title", new Object[]{sGlobalActivity.getSesc()},new int[]{1},"#"); + String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("receive_activity_txt", new Object[]{sGlobalActivity.getSesc()},new int[]{1},"#"); + String mailReward = ItemUtil.getMailReward(itemArrs); + int nowTime = (int) (TimeUtils.now() / 1000); + MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java index 951f7924e..83b21ff40 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java @@ -2,12 +2,12 @@ package com.ljsd.jieling.logic.mission.main; import com.google.common.collect.Sets; import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.MissionState; +import com.ljsd.jieling.network.session.ISession; -import java.util.BitSet; -import java.util.List; -import java.util.Set; +import java.util.*; public abstract class AbstractMissionType { //开启的任务,在可控范围内,使用map存储,利于查找 @@ -38,6 +38,33 @@ public abstract class AbstractMissionType { public abstract void calCumulationDataResult(User user,CumulationData.Result result,List missionStateChangeInfos, CumulationData cumulationData) throws Exception; + void getAllRewards(List itemAttrs){} + /** + * 获取全部奖励 + * @param missionType + * @param itemAttrs + */ + void getAllRewards(AbstractMissionType missionType, List itemAttrs){ + // 可领取任务 + Set finishMissionIds = missionType.getFinishMissionIds(); + // 已完成任务 + BitSet bitSet = missionType.getRewardedMissionIds(); + if (finishMissionIds == null || finishMissionIds.isEmpty()){ + return; + } + // 遍历 + Iterator iterator = finishMissionIds.iterator(); + while (iterator.hasNext()){ + Integer next = iterator.next(); + // 添加奖励 + itemAttrs.add(reward(next)); + // 存入已完成 + bitSet.set(next); + // + iterator.remove(); + } + } + public boolean checkIsNew(int missionId){ if(doingMissionIds.contains(missionId)){ return false; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java index dace6d767..1a8127dc1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java @@ -24,6 +24,11 @@ public class CowFlySkyMissionType extends AbstractMissionType { return arroGantFly.getReward(); } + @Override + public void getAllRewards(List itemAttrs){ + super.getAllRewards(this, itemAttrs); + } + @Override public void calCumulationDataResult(User user, CumulationData.Result result, List missionStateChangeInfos, CumulationData cumulationData) throws Exception { // 进行中得任务