牛气冲天, 活动结束发送未领取奖励

back_recharge
duhui 2021-05-27 16:10:19 +08:00
parent 2a5d149ac6
commit 8e37bd922c
4 changed files with 78 additions and 12 deletions

View File

@ -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<Integer> itemId = new ArrayList<>(reward.length);
List<Integer> itemNum = new ArrayList<>(reward.length);
Arrays.stream(reward).forEach(n->{itemId.add(n[0]);itemNum.add(n[1]);});

View File

@ -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<int[][]> 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);
}
}

View File

@ -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<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) throws Exception;
void getAllRewards(List<int[][]> itemAttrs){}
/**
*
* @param missionType
* @param itemAttrs
*/
void getAllRewards(AbstractMissionType missionType, List<int[][]> itemAttrs){
// 可领取任务
Set<Integer> finishMissionIds = missionType.getFinishMissionIds();
// 已完成任务
BitSet bitSet = missionType.getRewardedMissionIds();
if (finishMissionIds == null || finishMissionIds.isEmpty()){
return;
}
// 遍历
Iterator<Integer> 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;

View File

@ -24,6 +24,11 @@ public class CowFlySkyMissionType extends AbstractMissionType {
return arroGantFly.getReward();
}
@Override
public void getAllRewards(List<int[][]> itemAttrs){
super.getAllRewards(this, itemAttrs);
}
@Override
public void calCumulationDataResult(User user, CumulationData.Result result, List<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) throws Exception {
// 进行中得任务