【优化】限时招募,乾坤宝盒,灵兽宝阁整体包装
parent
188bf0bf25
commit
9c45649824
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 默认奖励配置
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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.*;
|
||||
|
|
Loading…
Reference in New Issue