Merge branch 'dh_dev_superbox' into master_test_gn

back_recharge
duhui 2021-06-18 09:51:02 +08:00
commit 984c6514c7
7 changed files with 350 additions and 4 deletions

View File

@ -13,6 +13,8 @@ import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.FightMainEventHandler;
import com.ljsd.jieling.logic.activity.RemoveEventHeroHandler;
import com.ljsd.jieling.logic.activity.UserLevelEventHandler;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.redpacket.WelfareRedPackSendHandler;
import com.ljsd.jieling.logic.activity.eventhandler.ActivityStateChangeHandler;
import com.ljsd.jieling.logic.activity.eventhandler.BuyGoodsDirectHandler;
@ -380,6 +382,9 @@ public class GlobalDataManaager implements IManager {
// 道具刷新
BuyGoodsNewLogic.refreshWelfareState(user);
user.getUserMissionManager().onGameEvent(user, GameEvent.LOGIN_GAME,0);
// 惊喜礼盒,事件推送
Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),-1));
}
user.getPlayerInfoManager().setLoginTime(TimeUtils.now());
}

View File

@ -94,5 +94,6 @@ public interface ActivityType {
int DEMON_TREASURE = 36;//降妖夺宝
int NEW_GENERAL_ATTACK = 200;//新将来袭
int SUPER_BOX = 69;//惊喜礼盒
}

View File

@ -72,6 +72,7 @@ public enum ActivityTypeEnum {
EQUIP_UPLEVEL(ActivityType.EQUIP_UPLEVEL,EquipUpLevelActivity::new),
TA_SUI_LING_XIAO(ActivityType.TA_SUI_LING_XIAO,TaSuiLingXiaoActivity::new),
CHOICE_DRAW_CRAD(ActivityType.CHOICE_DRAW_CRAD,ChoiceDrawCardActivity::new),
SUPER_BOX(ActivityType.SUPER_BOX,SuperBoxActivity::new),
;
private int type;

View File

@ -0,0 +1,215 @@
package com.ljsd.jieling.logic.activity;
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.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import config.SGlobalActivity;
import config.SSurpriseBox;
import manager.STableManager;
import util.TimeUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author hj
*
*
* :
* 1
* 2
* 3
* 4
* 5
* 6
*/
@SuppressWarnings("ALL")
public class SuperBoxActivity extends AbstractActivity {
SuperBoxActivity(int id) {
super(id);
Poster.getPoster().listenEvent(this, SuperBoxEvent.class);
}
@Override
public void initActivity(User user) throws Exception {
ActivityMission mission = new ActivityMission();
// 读表获取阶段奖励信息
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.getOrDefault(id,new HashMap<>());
if (boxMap.isEmpty()){
LOGGER.error("惊喜礼盒初始化失败,活动id:"+id);
}
List<Integer> list = boxMap.values().stream().mapToInt(SSurpriseBox::getId).boxed().collect(Collectors.toList());
// 初始化阶段奖励
ActivityLogic.getInstance().initOtherMission(mission, list);
user.getActivityManager().getActivityMissionMap().put(id, mission);
// 修改状态
updateState(user);
LOGGER.info("惊喜礼盒初始化..."+id);
}
@Override
public void onEvent(IEvent event) throws Exception {
// 类型验证
if (!(event instanceof SuperBoxEvent)) {
return;
}
// 获取信息
SuperBoxEvent event1 = (SuperBoxEvent) event;
User user = UserManager.getUser(event1.getUserId());
// 礼包处理
giftHandle(user, event1.getGiftId());
// 状态刷新
updateState(user);
}
/**
*
* @param user
* @param giftId
* @param missionMap
*/
private void giftHandle(User user, int giftId){
if (giftId == -1){
// 非礼包处理
return;
}
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
Collection<SSurpriseBox> boxes = SSurpriseBox.map.getOrDefault(id, new HashMap<>(0)).values();
for (SSurpriseBox box : boxes) {
if (box.getPackId() == giftId){
// 当前礼包状态处理
ActivityProgressInfo current = missionMap.get(box.getId());
if (current != null){
current.setState(ActivityType.HAD_TAKED);
current.setProgrss(8);
missionMap.put(box.getId(),current);
}
break;
}
}
}
/**
*
* ,Nif
* ,
* @param user
*/
private void updateState(User user){
long now = TimeUtils.now();
SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id);
// 验证活动是否开启
if (now < activity.getStartTimeLong() || now > activity.getEndTimeLong()){
return;
}
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
// 计算过去了几天
int days = TimeUtils.getSoFarWentDays(activity.getStartTimeLong(), now);
mission.setV(days);
// mission 单个礼包
Map<Integer, ActivityProgressInfo> missionMap = mission.getActivityMissionMap();
Map<Integer, SSurpriseBox> boxMap = SSurpriseBox.map.get(id);
// 极为恶心的循环,包含超多的if-else
for (Map.Entry<Integer, ActivityProgressInfo> entry : missionMap.entrySet()) {
int k = entry.getKey();
ActivityProgressInfo v = entry.getValue();
int progrss = v.getProgrss();
// 是否已购买
if (progrss == 8){
// 已购买
continue;
}
SSurpriseBox box = boxMap.get(k);
// 未购买, 是否解锁
if (days >= box.getUnlockDay()){
// 已解锁, 可买天数
if (days >= box.getBuyDay()){
// 可买, 是否购买前置礼包
if (checkBuyAgo(user,box.getId())){
// 已购买前置. 是否需要特权, 是否激活特权
progrss = checkRule(user,box.getRule())?1:4;
}else {
// 未购买前置
progrss = 3;
}
}else {
// 不可买
progrss = 2;
}
}else {
// 未解锁, 是否可见
if (days >= box.getVisibleDay()){
// 可见, 是否可预览
progrss = days >= box.getViewDay()?6:7;
}else {
// 不可见
progrss = 5;
}
}
v.setProgrss(progrss);
}
// 客户端推送
ISession session = OnlineUserManager.getSessionByUid(user.getId());
sendActivityProgress(session, mission, null);
}
/**
*
* @param user
* @param boxId
* @return
*/
private boolean checkBuyAgo(User user, int boxId){
boolean result = true;
// 获取消息
Map<Integer, ActivityProgressInfo> missionMap = user.getActivityManager().getActivityMissionMap().get(id).getActivityMissionMap();
SSurpriseBox box = STableManager.getConfig(SSurpriseBox.class).get(boxId);
// 非空
if (!missionMap.isEmpty() && box != null){
// 前置礼包状态验证
ActivityProgressInfo info = missionMap.get(box.getLimitPackFId());
// info为null代表没有前置条件, state==2代表已买过
if (info != null && info.getState() == ActivityType.WILL_TAKE){
result = false;
}
}
return result;
}
/**
*
* 0 true
* @param user
* @param ruleId
* @return
*/
private boolean checkRule(User user, int ruleId){
boolean result = true;
switch (ruleId){
case 1:
// 普通月卡
result = user.getPlayerInfoManager().getMonthCard().get(Global.MONTHCARDID) != null;
break;
case 2:
// 高级月卡
result = user.getPlayerInfoManager().getMonthCard().get(Global.LMONTHCARDID) != null;
break;
default:
break;
}
return result;
}
}

View File

@ -0,0 +1,35 @@
package com.ljsd.jieling.logic.activity.event;
/**
* @Author hj
* @Date 2021/5/26 11:05
* @Description:
* @Version 1.0
*/
public class SuperBoxEvent implements IEvent {
private int userId;
private int giftId = -1;//礼包id
public SuperBoxEvent(int userId, int giftId) {
this.userId = userId;
this.giftId = giftId;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getGiftId() {
return giftId;
}
public void setGiftId(int giftId) {
this.giftId = giftId;
}
}

View File

@ -16,10 +16,7 @@ import com.ljsd.jieling.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.event.BuyGoodsDirectEvent;
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.RechargeInfo;
import com.ljsd.jieling.logic.dao.UserManager;
@ -221,6 +218,9 @@ public class BuyGoodsNewLogic {
//活动
user.getPlayerInfoManager().setRechargedaily(user.getPlayerInfoManager().getRechargedaily()+price);
changeActivity(user,price,info);
// 惊喜礼盒,事件推送
Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),config.getId()));
}
if(!info.getIsFirst()){
info.setIsFirst(true);

View File

@ -0,0 +1,89 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Table(name ="SurpriseBox")
public class SSurpriseBox implements BaseConfig {
private int id;
private int activityId;
private int packId;
private int unlockDay;
private int visibleDay;
private int viewDay;
private int buyDay;
private int limitPackFId;
private int limitPackBId;
private int rule;
/**
* key: id value: list
*/
public static Map<Integer, Map<Integer,SSurpriseBox>> map = new HashMap<>();
@Override
public void init() throws Exception {
Map<Integer, SSurpriseBox> config = STableManager.getConfig(SSurpriseBox.class);
config.values().forEach(v->{
Map<Integer, SSurpriseBox> boxMap = map.getOrDefault(v.getActivityId(), new HashMap<>());
boxMap.put(v.getId(),v);
map.put(v.getActivityId(),boxMap);
});
}
public int getId() {
return id;
}
public int getActivityId() {
return activityId;
}
public int getPackId() {
return packId;
}
public int getVisibleDay() {
return visibleDay;
}
public int getBuyDay() {
return buyDay;
}
public int getLimitPackFId() {
return limitPackFId;
}
public int getLimitPackBId() {
return limitPackBId;
}
public int getRule() {
return rule;
}
public int getUnlockDay() {
return unlockDay;
}
public int getViewDay() {
return viewDay;
}
}