【优化】限时招募,乾坤宝盒,灵兽宝阁整体包装

back_recharge
duhui 2021-11-25 16:29:08 +08:00
parent 188bf0bf25
commit 9c45649824
7 changed files with 247 additions and 28 deletions

View File

@ -7,11 +7,12 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.*;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic;
import com.ljsd.jieling.logic.dao.*;
@ -253,6 +254,8 @@ public class GetPlayerInfoHandler extends BaseHandler{
Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),SuperBoxEvent.fund_old_user));
// 登峰造极孙悟空
Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),10023,0));
// 常驻活动重置
finalActivityReset(user);
// 无尽秘宝处理
endLessTreasureHandler(user);
expeditionTreasureHandler(user);
@ -270,6 +273,26 @@ public class GetPlayerInfoHandler extends BaseHandler{
}
}
/**
*
* @param user
*/
private void finalActivityReset(User user){
Map<Integer, ActivityMission> missionMap = user.getActivityManager().getActivityMissionMap();
// 限时招募
ActivityMission mission = missionMap.get(20012);
if (mission != null){
ChoiceDrawCardActivity activity = (ChoiceDrawCardActivity)ActivityTypeEnum.getActicityType(20012);
activity.checkResetProgress(user,mission);
}
// 灵兽招募
ActivityMission mission2 = missionMap.get(14501);
if (mission2 != null){
LimitRandomSpecialMonsterActivityNew activity = (LimitRandomSpecialMonsterActivityNew)ActivityTypeEnum.getActicityType(14501);
activity.checkResetProgress(user,mission2);
}
}
/**
*
* @param user

View File

@ -420,10 +420,10 @@ public class GlobalDataManaager implements IManager {
// 需要隔天刷新的字段统一在这里处理
if (TimeUtils.isOverTime(0,user.getPlayerInfoManager().getLoginTime())) {
// 周一零点执行逻辑,跨周执行
if (!TimeUtils.isSameWeek7(user.getPlayerInfoManager().getLoginTime())){
// 灵兽限时抽卡重置
ActivityLogic.getInstance().zeroResetSpecialMonsterActivity(session);
}
// if (!TimeUtils.isSameWeek7(user.getPlayerInfoManager().getLoginTime())){
// // 灵兽限时抽卡重置
// ActivityLogic.getInstance().zeroResetSpecialMonsterActivity(session);
// }
//活动刷新
ActivityLogic.getInstance().flushEveryDay(user,fBuilder);
PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder);

View File

@ -144,6 +144,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
/**
*
* if
* onActivityEndOnMySelf
*/
@Override
@ -176,15 +177,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
//up miss
int[][] reward = new int[1][2];
if(sGlobalActivity.getType() == ActivityType.SPECIAL_MONSTER_RANDOM_ACTIVITY) {
int summonId=activityMission.getActivityMissionMap().get(0).getProgrss();
if (summonId>0){
SSpiritAnimalSummon summonConfig=STableManager.getConfig(SSpiritAnimalSummon.class).get(summonId);
reward[0][0]=summonConfig.getOriginalItem();
reward[0][1]=sActivityRewardConfig.getReward()[0][1];
}
}
int[][] reward = sActivityRewardConfig.getReward();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
checkAndSetProgress(activityMission, activityProgressInfo, missionId);
@ -400,7 +393,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler {
*
* @param filterMissId miss
*/
public void sendActivityProgress(ISession session, ActivityMission activityMission, Set<Integer> filterMissId) {
public void sendActivityProgress(ISession session, ActivityMission activityMission, Set<Integer> filterMissId) {
PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder();
builder.setActivityInfo(CommonProto.ActivityInfo.newBuilder().setValue(activityMission.getV()).addAllMission(getAllMissInfo(activityMission, filterMissId)).setActivityId(id));
if (session != null) {

View File

@ -40,7 +40,7 @@ public enum ActivityTypeEnum {
LUCK_WHEEL(ActivityType.LUCK_WHEEL, LuckWheelNormalActivity::new),
LUCK_WHEEL_ADVANCE(ActivityType.LUCK_WHEEL_ADVANCE, LuckWheelAdvancedActivity::new),
NEW_WELFARE(ActivityType.NEW_WELFARE, NewWelfareActivity::new),
LIMIT_RANDOM_CARD(ActivityType.LIMIT_RANDOM_CARD,LimitRandomCardActivity::new),
// LIMIT_RANDOM_CARD(ActivityType.LIMIT_RANDOM_CARD,LimitRandomCardActivity::new),
LIMIT_UP_CARD(ActivityType.LIMIT_UP_CARD,LimitUpCardActivity::new),
MISSIONSEARCH_EXPERT(ActivityType.MISSIONSEARCH_EXPERT,MissSearchExpectRankActivity::new),
LUCKWHEEL_EXPERT(ActivityType.LUCKWHEEL_EXPERT,LuckWheelExpectRankActivity::new),
@ -62,7 +62,7 @@ public enum ActivityTypeEnum {
SHEJI_ACTIVITY(ActivityType.SHEJI_ACTIVITY,SheJiActivity::new),
SUB_ACTIVITY(ActivityType.SUB_ACTIVITY, SubActivity::new),
SKIN_RECHARGE_ACTIVITY(ActivityType.SKIN_RECHARGE_ACTIVITY, DefaultEmptyActivity::new),
SPECIAL_MONSTER_RANDOM_ACTIVITY(ActivityType.SPECIAL_MONSTER_RANDOM_ACTIVITY,LimitRandomSpecialMonsterActivity::new),
SPECIAL_MONSTER_RANDOM_ACTIVITY(ActivityType.SPECIAL_MONSTER_RANDOM_ACTIVITY,LimitRandomSpecialMonsterActivityNew::new),
SPECIAL_MONSTER_GIFT_ACTIVITY(ActivityType.SPECIAL_MONSTER_GIFT_ACTIVITY,DefaultEmptyActivity::new),
DEMON_TREASURE(ActivityType.DEMON_TREASURE,LimitRandomSpecialMonsterActivity::new),
NEW_GENERAL_ATTACK(ActivityType.NEW_GENERAL_ATTACK,DefaultEmptyActivity::new),
@ -124,7 +124,7 @@ public enum ActivityTypeEnum {
*/
public static AbstractActivity getActicityType(int id) {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
if (activityEnumMap.containsKey(sGlobalActivity.getType())){
if (sGlobalActivity != null && activityEnumMap.containsKey(sGlobalActivity.getType())){
return activityEnumMap.get(sGlobalActivity.getType()).toActivity(id);
}
return null;

View File

@ -104,7 +104,7 @@ public class ChoiceDrawCardActivity extends AbstractActivity {
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
// 检查是否需要重启奖励
checkResetProgress(mission,missionId);
checkResetProgress(user,mission);
// 状态推送
sendActivityProgress(session, mission, null);
// 打点上报
@ -113,22 +113,21 @@ public class ChoiceDrawCardActivity extends AbstractActivity {
}
/**
*
*
* @param mission
* @param missionId
*/
private void checkResetProgress(ActivityMission mission,int missionId){
// 获取全部未领取的mission
List<ActivityProgressInfo> collect = mission.getActivityMissionMap().values().stream().filter(v -> v.getState() == 0).collect(Collectors.toList());
// 为空,表示全部领取,重置奖励
if (collect.isEmpty()){
public void checkResetProgress(User user,ActivityMission mission){
// 是否已领取全部奖励
if (checkActivityMissionFinishAndTake(user.getId(),id,mission)){
// 配置表
List<SActivityRewardConfig> configs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
// 获取最大奖励值
List<Integer> collect2 = configs.stream().mapToInt(v -> v.getValues()[0][0]).boxed().collect(Collectors.toList());
Integer max = Collections.max(collect2);
// 获取盈余的积分
int progrss = mission.getActivityMissionMap().get(missionId).getProgrss();
Integer maxMissionId = Collections.max(mission.getActivityMissionMap().keySet());
int progrss = mission.getActivityMissionMap().get(maxMissionId).getProgrss();
int count = (progrss-max)>0?(progrss-max):0;
// 重置全部mission为新积分
List<Integer> missionIds = configs.stream().mapToInt(SActivityRewardConfig::getId).boxed().collect(Collectors.toList());
@ -144,6 +143,29 @@ public class ChoiceDrawCardActivity extends AbstractActivity {
}
}
/**
*
* @param uid
* @param activityId
* @param activityMission
* @return
*/
@Override
public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
if (activityProgressInfoMap.isEmpty()) {
return false;
}
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
ActivityProgressInfo activityProgressInfo = item.getValue();
int missionStatus = activityProgressInfo.getState();
if (missionStatus == ActivityType.WILL_TAKE) {
return false;
}
}
return true;
}
/**
*
* @param reward

View File

@ -0,0 +1,181 @@
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.jbean.ActivityMission;
import com.ljsd.jieling.jbean.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.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SActivityRewardConfig;
import config.SSpiritAnimalSummon;
import manager.STableManager;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author lvxinran
* @date 2020/11/11
* @discribe
*/
public class LimitRandomSpecialMonsterActivityNew extends LimitRandomCardActivity {
public LimitRandomSpecialMonsterActivityNew(int id) {
super(id);
}
@Override
public void initActivity(User user) {
super.initActivity(user);
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
ActivityMission activityMission = activityMissionMap.get(id);
if(activityMission!=null){
activityMission.getActivityMissionMap().put(0,new ActivityProgressInfo());
}
}
@Override
void updateProgress(ActivityMission activityMission, int count) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
int progress;
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
if(item.getKey()==0){
continue;
}
ActivityProgressInfo activityProgressInfo = item.getValue();
progress = item.getValue().getProgrss() + count;
activityProgressInfo.setProgrss(progress);
activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo);
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception {
User user = UserManager.getUser(session.getUid());
//checkAndUpdate cfg
SActivityRewardConfig config = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId);
if (config == null || config.getActivityId() != id) {
throw new ErrorCodeException(ErrorCode.CFG_NULL,"功能不存在:"+missionId);
}
// acitvityinfo check
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if (mission == null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"数据错误");
}
if (mission.getActivityState() != ActivityType.OPEN_STATE || mission.getOpenType() == 0) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN,"活动未开启");
}
ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(missionId);
if (progressInfo == null || progressInfo.getState() == ActivityType.HAD_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
//take rewards checkAndUpdate
if (!takeRewardsProcess(session, config, progressInfo)) {
throw new ErrorCodeException(ErrorCode.newDefineCode("未达到领取条件"));
}
checkAndSetProgress(mission, progressInfo, missionId);
//up miss
int summonId = mission.getActivityMissionMap().get(0).getProgrss();
int[][] reward = getReward(config.getReward(),summonId);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD);
PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true);
// 检查是否需要重启奖励
checkResetProgress(user,mission);
// 状态推送
sendActivityProgress(session, mission, null);
// 打点上报
reportTakeActivityReward(user,reward,missionId);
return true;
}
/**
*
* @param reward
* @param summonId
* @return
*/
private int[][] getReward(int[][] reward, int summonId){
if (summonId <= 0){
return reward;
}
SSpiritAnimalSummon summonConfig = STableManager.getConfig(SSpiritAnimalSummon.class).get(summonId);
int[][] result = new int[reward.length][2];
for (int i = 0; i < reward.length; i++) {
result[i][0] = summonConfig.getOriginalItem();
result[i][1] = reward[i][1];
}
return result;
}
/**
*
* @param user
* @param mission
*/
public void checkResetProgress(User user,ActivityMission mission){
// 是否已领取全部奖励
if (checkActivityMissionFinishAndTake(user.getId(),id,mission)){
// 配置表
List<SActivityRewardConfig> configs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id);
// 获取最大奖励值
List<Integer> collect2 = configs.stream().mapToInt(v -> v.getValues()[0][0]).boxed().collect(Collectors.toList());
Integer max = Collections.max(collect2);
// 获取盈余的积分
Integer maxMissionId = Collections.max(mission.getActivityMissionMap().keySet());
int progrss = mission.getActivityMissionMap().get(maxMissionId).getProgrss();
int count = Math.max((progrss - max), 0);
// 获取已选中的灵兽
int summonId = Optional.ofNullable(mission.getActivityMissionMap().get(0)).map(ActivityProgressInfo::getProgrss).orElse(0);
// 重置全部mission为新积分
List<Integer> missionIds = configs.stream().mapToInt(SActivityRewardConfig::getId).boxed().collect(Collectors.toList());
for(Integer id : missionIds){
ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo();
activityProgressInfo.setProgrss(count);
activityProgressInfo.setState(0);
mission.getActivityMissionMap().put(id, activityProgressInfo);
}
// 重新赋值灵兽
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setProgrss(summonId);
mission.getActivityMissionMap().put(0, progressInfo);
mission.setOpenType(1);
mission.setV(0);
mission.setActivityState(ActivityType.OPEN_STATE);
}
}
/**
*
* @param uid
* @param activityId
* @param activityMission4
* @return
*/
@Override
public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) {
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityMissionMap();
if (activityProgressInfoMap.isEmpty()) {
return false;
}
for (Map.Entry<Integer, ActivityProgressInfo> item : activityProgressInfoMap.entrySet()) {
ActivityProgressInfo activityProgressInfo = item.getValue();
int missionStatus = activityProgressInfo.getState();
if (missionStatus == ActivityType.WILL_TAKE && item.getKey() != 0) {
return false;
}
}
return true;
}
}

View File

@ -5,11 +5,11 @@ import com.ljsd.jieling.jbean.ActivityProgressInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SActivityRewardConfig;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import util.TimeUtils;
import java.util.*;