招募秘宝

back_recharge
duhui 2021-12-10 14:24:47 +08:00
parent 02807f9c49
commit 143c7a5230
15 changed files with 412 additions and 23 deletions

View File

@ -16,10 +16,7 @@ import com.ljsd.jieling.logic.activity.UserLevelEventHandler;
import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.activity.eventhandler.ActivityStateChangeHandler;
import com.ljsd.jieling.logic.activity.eventhandler.BuyGoodsDirectHandler;
import com.ljsd.jieling.logic.activity.eventhandler.GuildForceChangeEventHandler;
import com.ljsd.jieling.logic.activity.eventhandler.ShanHeSheJiTuEventHandler;
import com.ljsd.jieling.logic.activity.eventhandler.*;
import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.championship.ChampionshipLogic;
@ -297,6 +294,7 @@ public class GlobalDataManaager implements IManager {
new ActivityStateChangeHandler();
new GuildForceChangeEventHandler();
new ShanHeSheJiTuEventHandler();
new SummonTreasureHandler();
ChampionshipLogic.minuteCheck(true);
GuildFightLogic.minuteCheckForCarFight();
} catch (Exception e) {

View File

@ -660,28 +660,29 @@ public class ActivityLogic implements IEventHandler{
if(openRules!=null&&openRules.length>0){
int openRuleType = openRules[0];
int openRulleValue = openRules[1];
if(openRuleType == 1){
if (openRuleType == 1) {
int virtureId = SMainLevelConfig.config.get(openRulleValue).getVirtureId();
int fightId = user.getMainLevelManager().getFightId();
SMainLevelConfig mineMainLevelConfig = SMainLevelConfig.fightPreMap.get(fightId);
if(user.getMainLevelManager().getState() == 2 ){
SMainLevelConfig mineMainLevelConfig = SMainLevelConfig.fightPreMap.get(fightId);
if (user.getMainLevelManager().getState() == 2) {
mineMainLevelConfig = SMainLevelConfig.config.get(user.getMainLevelManager().getFightId());
}
int myVirtureId =0;
if(mineMainLevelConfig != null){
myVirtureId =mineMainLevelConfig.getVirtureId();
int myVirtureId = 0;
if (mineMainLevelConfig != null) {
myVirtureId = mineMainLevelConfig.getVirtureId();
}
if(virtureId > myVirtureId){
if (virtureId > myVirtureId) {
state = ActivityType.UNOPEN_STATE;
}
}else if(openRuleType == 2){
if(user.getPlayerInfoManager().getLevel()<openRulleValue){
} else if (openRuleType == 2) {
if (user.getPlayerInfoManager().getLevel() < openRulleValue) {
state = ActivityType.UNOPEN_STATE;
}
}else if(openRuleType == 3){
} else if (openRuleType == 3) {
state = ActivityType.UNOPEN_STATE;
} else if (openRuleType == 4) {
state = ActivityType.UNOPEN_STATE;
}
}
return state;
}
@ -943,12 +944,12 @@ public class ActivityLogic implements IEventHandler{
}
private int getBlessActivityId(User user){
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
for(Integer activityId:activityMissionMap.keySet()){
if(SGlobalActivity.getsGlobalActivityMap().get(activityId).getType()==ActivityType.BLESSACTIVITY){
return activityId;
}
}
// Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
// for(Integer activityId:activityMissionMap.keySet()){
// if(SGlobalActivity.getsGlobalActivityMap().get(activityId).getType()==ActivityType.BLESSACTIVITY){
// return activityId;
// }
// }
return 0;
}
/**

View File

@ -26,7 +26,8 @@ public interface ActivityType {
int RechargeTotal = 5; //首充
// int RechargeTotal = 5; //累计充值
int GrowthFund = 6; //成长基金
int BLESSACTIVITY = 7;//云梦祈福
// int BLESSACTIVITY = 7;//云梦祈福(跟策划对过,活动已删除)
int SUMMON_TREASURE = 7;//招募秘宝
int TREASURE = 8; //青龙秘宝(孙龙的宝藏)
int LUCKYCAT = 9;//招財貓
int SERVERHAPPY = 10; //七日狂欢

View File

@ -14,7 +14,7 @@ public enum ActivityTypeEnum {
FIRSTRECHARGE(ActivityType.RechargeTotal, RechargeTotalActivity::new),
// RECHARGETOTAL(ActivityType.RechargeTotal, RechargeTotalActivity::new),
GROWTHFUND(ActivityType.GrowthFund, GrowthFundActivity::new),
BLESSACTIVITY(ActivityType.BLESSACTIVITY, BlessActivity::new),
// BLESSACTIVITY(ActivityType.BLESSACTIVITY, BlessActivity::new),
TREASUREACTIVITY(ActivityType.TREASURE, TreasureActivity::new),
LUCKYCAT(ActivityType.LUCKYCAT, LuckyCatActivity::new),
SERVERHAPPY(ActivityType.SERVERHAPPY, DefaultEmptyActivity::new),
@ -94,6 +94,7 @@ public enum ActivityTypeEnum {
TRANSFORMATION_DRAW_CARD(ActivityType.TRANSFORMATION_DRAW_CARD,DefaultEmptyActivity::new),//方寸寻宝
CONTINUOUS_GIFT_NEW(ActivityType.CONTINUOUS_GIFT_NEW,ContinuousGiftActivity::new),//新连续礼包
ARENA_RANK_EXPERIMENT(ActivityType.ARENA_RANK_EXPERIMENT,ArenaRankActivity::new),//竞技试炼
SUMMON_TREASURE(ActivityType.SUMMON_TREASURE,SummonTreasureActivity::new),//招募秘宝
;
private int type;

View File

@ -0,0 +1,163 @@
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.OnlineUserManager;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.newRechargeInfo.PushRechargeType;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.*;
import manager.STableManager;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import java.util.ArrayList;
import java.util.Optional;
class SummonTreasureActivity extends AbstractActivity {
public SummonTreasureActivity(int id) {
super(id);
Poster.getPoster().listenEvent(this, SummonTreasureActivityEvent.class);
}
@Override
public void initActivity(User user) throws Exception {
ActivityMission mission = new ActivityMission();
// 初始化阶段奖励
ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>());
user.getActivityManager().getActivityMissionMap().put(id, mission);
LOGGER.info("招募秘宝初始化..."+id);
}
@Override
public void onEvent(IEvent event) throws Exception {
if (!(event instanceof SummonTreasureActivityEvent)) {
return;
}
SummonTreasureActivityEvent event1 = (SummonTreasureActivityEvent) event;
//动态控制购买数量
User user = UserManager.getUser(event1.getUid());
// 客户端推送
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id);
if (mission != null){
Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),id,mission.getActivityState()));
// 推送客户端数据
ISession session = OnlineUserManager.getSessionByUid(user.getId());
mission.setV(user.getPlayerInfoManager().getGetFiveStarHeroNum());
sendActivityProgress(session, mission, null);
}
}
@Override
public boolean takeReward(ISession session, int missionId) throws Exception {
User user = UserManager.getUser(session.getUid());
//checkAndUpdate cfg
SSummonTreasure treasure = STableManager.getConfig(SSummonTreasure.class).get(missionId);
if (treasure == null || treasure.getGrade() != 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) {
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN,"活动未开启");
}
ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(missionId);
if (progressInfo != null && progressInfo.getState() == ActivityType.FINISH_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取"));
}
// 验证领取条件值
if (!takeRewardsProcess(session,treasure)) {
LOGGER.error("the uid={} the missionId={},the missionProgress={},the require is={} ", session.getUid(), treasure.getId(), user.getPlayerInfoManager().getGetFiveStarHeroNum(), treasure.getCount());
throw new ErrorCodeException(ErrorCode.newDefineCode("未达到领取条件"));
}
ArrayList<int[][]> reward = new ArrayList<>();
// 是否购买礼包
if (isBuyGift(user)){
// 宝藏奖励
reward.add(treasure.getTreasureReward());
// 普通奖励
if (progressInfo == null){
reward.add(treasure.getReward());
}
checkAndSetProgress(mission,missionId,ActivityType.FINISH_TAKED);
}else {
if (progressInfo != null){
throw new ErrorCodeException(ErrorCode.newDefineCode("普通奖励已经领取"));
}
// 普通奖励
reward.add(treasure.getReward());
checkAndSetProgress(mission,missionId,ActivityType.HAD_TAKED);
}
// reward
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);
// 状态推送
sendActivityProgress(session, mission, null);
// 打点上报
reportTakeActivityReward(user,reward,missionId);
return true;
}
/**
*
* @param user
* @return
* @throws Exception
*/
private boolean isBuyGift(User user){
int[] ints = Optional.ofNullable(SGlobalActivity.getsGlobalActivityMap().get(id)).map(SGlobalActivity::getCanBuyRechargeId).orElse(null);
if (ints == null){
return true;
}
for (int anInt : ints) {
ReceiveWelfareBag bag = (ReceiveWelfareBag) Optional.ofNullable(user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap())
.map(v -> v.get(anInt)).orElse(null);
// 礼包为null礼包可买礼包未买
if (bag == null || !bag.isBought()){
return false;
}
}
return true;
}
@Override
public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) {
return false;
}
/**
*
* @param session
* @param treasure
* @return
* @throws Exception
*/
boolean takeRewardsProcess(ISession session, SSummonTreasure treasure) throws Exception {
User user = UserManager.getUser(session.getUid());
return user.getPlayerInfoManager().getGetFiveStarHeroNum() >= treasure.getCount();
}
/**
*
*/
public void checkAndSetProgress(ActivityMission activityMission, int missionId, int state) {
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setState(state);
activityMission.getActivityMissionMap().put(missionId, progressInfo);
}
}

View File

@ -0,0 +1,17 @@
package com.ljsd.jieling.logic.activity.event;
public class SummonTreasureActivityEvent implements IEvent{
private int uid;
public SummonTreasureActivityEvent(int uid) {
this.uid = uid;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
}

View File

@ -0,0 +1,37 @@
package com.ljsd.jieling.logic.activity.event;
public class SummonTreasureEvent implements IEvent{
private int uid;
private int star;
private int num;
public SummonTreasureEvent(int uid, int star, int num) {
this.uid = uid;
this.star = star;
this.num = num;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public int getStar() {
return star;
}
public void setStar(int star) {
this.star = star;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}

View File

@ -11,10 +11,13 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.util.ToolsUtil;
import config.SGlobalActivity;
import config.SSummonTreasure;
import javax.naming.spi.ObjectFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ActivityStateChangeHandler implements IEventHandler {
public ActivityStateChangeHandler() {
@ -39,6 +42,33 @@ public class ActivityStateChangeHandler implements IEventHandler {
ActivityLogic.getInstance().checkNeedOpenStore(user,shopId,startTime,endTime);
}
}
// 活动开启类型4
List<SSummonTreasure> treasureList = SSummonTreasure.getTreasureMap().get(activityId);
// 招募基金活动
if (treasureList != null && !treasureList.isEmpty()){
List<SGlobalActivity> sGlobalActivities = SGlobalActivity.sGlobalActivityMapByOpenRules.getOrDefault(4, new ArrayList<>());
int getFiveStarHeroNum = user.getPlayerInfoManager().getGetFiveStarHeroNum();
List<SGlobalActivity> activities = sGlobalActivities.stream().filter(s -> s.getOpenRules()[1] == activityId).collect(Collectors.toList());
boolean result = true;
for (SGlobalActivity activity : activities) {
for (SSummonTreasure treasure : treasureList) {
// 条件未满足
if (treasure.getCount() > getFiveStarHeroNum){
result = false;
break;
}
}
if (result){
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activity.getId());
AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(activity.getId());
if(mission != null && mission.getActivityState() == ActivityType.UNOPEN_STATE && abstractActivity != null){
//修改活动状态,推送给前端
abstractActivity.setOpenState(user,ActivityType.OPEN_STATE);
ActivityLogic.getInstance().sendActivityInfo(user,activity.getId());
}
}
}
}
}else if(state == ActivityType.FINISH_STATE){
List<SGlobalActivity> sGlobalActivities = SGlobalActivity.sGlobalActivityMapByOpenRules.getOrDefault(3, new ArrayList<>(0));
sGlobalActivities.stream().filter(s->s.getOpenRules()[1] == activityId).forEach(s->{

View File

@ -0,0 +1,27 @@
package com.ljsd.jieling.logic.activity.eventhandler;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SummonTreasureActivityEvent;
import com.ljsd.jieling.logic.activity.event.SummonTreasureEvent;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
public class SummonTreasureHandler implements IEventHandler {
public SummonTreasureHandler() {
Poster.getPoster().listenEvent(this, SummonTreasureEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
if( ! (event instanceof SummonTreasureEvent) ){
return;
}
SummonTreasureEvent event1 = (SummonTreasureEvent) event;
User user = UserManager.getUser(event1.getUid());
if (event1.getStar() == 5){
user.getPlayerInfoManager().setGetFiveStarHeroNum(user.getPlayerInfoManager().getGetFiveStarHeroNum()+event1.getNum());
Poster.getPoster().dispatchEvent(new SummonTreasureActivityEvent(user.getId()));
}
}
}

View File

@ -196,10 +196,22 @@ public class PlayerManager extends MongoBase {
private long weekCardTimeFirst;//本周第一次看到周卡的时间
private int weekCardTimeFirstLevel;//本周第一次看到周卡时人物等级
//玩家抽取到的五星次数,目前只应用于招募基金使用
private int getFiveStarHeroNum;
public PlayerManager(){
this.setRootCollection(User._COLLECTION_NAME);
}
public int getGetFiveStarHeroNum() {
return getFiveStarHeroNum;
}
public void setGetFiveStarHeroNum(int getFiveStarHeroNum) {
this.getFiveStarHeroNum = getFiveStarHeroNum;
updateString("getFiveStarHeroNum", getFiveStarHeroNum);
}
public int getTreasureLevel() {
return treasureLevel;
}

View File

@ -506,6 +506,15 @@ public class BuyGoodsNewLogic {
result = true;
}
}
if (bag.getType() == RechargeType.receive.getType()){
for (String[] strings : bag.getCondition()) {
if (strings[0].equals("9")){
if(!judgeOpen(strings,user)){
bag.setOpen(false);
}
}
}
}
}else{
if(bag.getType() == RechargeType.push.getType() && !bag.isOpen()){
user.getPlayerInfoManager().getNewRechargeInfo().removePush(bag.getModId());
@ -635,6 +644,17 @@ public class BuyGoodsNewLogic {
return user.getPlayerInfoManager().getMonthCard().get(Global.LMONTHCARDID) != null;
}else if(con[0].equals("7")){
return true;
}else if (con[0].equals("9")){
SRechargeCommodityNewConfig config = SRechargeCommodityNewConfig.getConfigById(Integer.parseInt(con[1]));
if (config == null){
return true;
}
RechargeHandler rechargeHandler = getRechargeHandler(config.getOtype());
AbstractWelfareBag bag = rechargeHandler.getRechargeMap(user).get(config.getId());
if (bag == null){
return true;
}
return bag.buyAgo();
}
return false;
}

View File

@ -90,6 +90,10 @@ public class AbstractWelfareBag extends MongoBase{
return true;
}
public boolean buyAgo(){
return buyTimes >= getLimit();
}
public boolean checkBuy() {
if(!open){
LOGGER.error("礼包:{}未开启",modId);

View File

@ -74,6 +74,11 @@ public class ReceiveWelfareBag extends AbstractWelfareBag {
}
}
@Override
public boolean buyAgo(){
return bought;
}
@Override
public void refresh(){
super.refresh();

View File

@ -1388,6 +1388,7 @@ public class ItemUtil {
PlayerManager playerInfoManager = user.getPlayerInfoManager();
int[] heroStar = SItem.getsItemMap().get(cardId).getHeroStar();
Hero hero = new Hero(user.getId(),heroStar[0],heroStar[1]);
Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1));
heroManager.addHero(hero);
// 鸿蒙阵推送
HeroLogic.getInstance().addOrUpdateHongmeng(OnlineUserManager.getSessionByUid(user.getId()));

View File

@ -0,0 +1,72 @@
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 ="SummonTreasure")
public class SSummonTreasure implements BaseConfig {
private int id;
private int level;
private int grade;
private int count;
private int[][] reward;
private int[][] treasureReward;
/**
* keyid value
*/
private static Map<Integer, List<SSummonTreasure>> treasureMap = new HashMap<>();
@Override
public void init() throws Exception {
Map<Integer, SSummonTreasure> config = STableManager.getConfig(SSummonTreasure.class);
HashMap<Integer, List<SSummonTreasure>> map = new HashMap<>();
config.values().forEach(v->{
List<SSummonTreasure> treasures = map.getOrDefault(v.getGrade(), new ArrayList<SSummonTreasure>());
treasures.add(v);
map.put(v.getGrade(),treasures);
});
treasureMap = map;
}
public static Map<Integer, List<SSummonTreasure>> getTreasureMap() {
return treasureMap;
}
public int getId() {
return id;
}
public int getLevel() {
return level;
}
public int getGrade() {
return grade;
}
public int getCount() {
return count;
}
public int[][] getReward() {
return reward;
}
public int[][] getTreasureReward() {
return treasureReward;
}
}