diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/DesireDrawCardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/DesireDrawCardHandler.java new file mode 100644 index 000000000..afc6d3fa3 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/DesireDrawCardHandler.java @@ -0,0 +1,57 @@ +package com.ljsd.jieling.handler; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.logic.dao.PlayerManager; +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.MessageUtil; +import org.springframework.stereotype.Component; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.Set; + +/** + * @Author hj + * @Date 2021/6/29 14:38 + * @Description: + * @Version 1.0 + */ +@Component +public class DesireDrawCardHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.DESIRE_DRAW_CARD_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, PlayerInfoProto.DesireDrawCardRequest proto) throws Exception { + // 用户信息 + User user = UserManager.getUser(iSession.getUid()); + PlayerManager playerManager = user.getPlayerInfoManager(); + int type = proto.getType(); + int tempId = proto.getTempId(); + switch (type){ + case 1: //英雄心愿 + Set heroList = playerManager.getDesireOpenHeroList(); + if (heroList.contains(tempId) || tempId == 0){ + playerManager.putDesireDraw(type, tempId); + } + break; + case 4: //法宝心愿 + Set fabaoList = playerManager.getDesireOpenFabaoList(); + if (fabaoList.contains(tempId) || tempId == 0){ + playerManager.putDesireDraw(type, tempId); + } + break; + default: + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); + } + // 更新的英雄列表 + PlayerInfoProto.DesireDrawCardResponse build = PlayerInfoProto.DesireDrawCardResponse.newBuilder().setType(type).setTempId(tempId).build(); + MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.DESIRE_DRAW_CARD_RESPONSE_VALUE, build, true); + } + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index 04e3d60ca..8db48e744 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -457,21 +457,21 @@ public class GetPlayerInfoHandler extends BaseHandler{ * @param user */ private void wishOldUserRandomNumInit(User user){ - // 玩家创建时间 - long createTime = user.getPlayerInfoManager().getCreateTime(); - // 截止时间 2021-10-28 00:00:00 - long endTime = 1635350400000L; - // 截止时间之前创建的角色 - if (createTime <= endTime){ - // 钻石卡池抽奖次数 - Integer num = user.getHeroManager().getRandomCountByType().getOrDefault(1,0); - // 限制次数 - int value = SSpecialConfig.getIntegerValue(SSpecialConfig.UNLOCKCARDWISH); - if (num < value){ - // 修改次数 - user.getHeroManager().putRandomType(1,value); - } - } +// // 玩家创建时间 +// long createTime = user.getPlayerInfoManager().getCreateTime(); +// // 截止时间 2021-10-28 00:00:00 +// long endTime = 1635350400000L; +// // 截止时间之前创建的角色 +// if (createTime <= endTime){ +// // 钻石卡池抽奖次数 +// Integer num = user.getHeroManager().getRandomCountByType().getOrDefault(1,0); +// // 限制次数 +// int value = SSpecialConfig.getIntegerValue(SSpecialConfig.UNLOCKCARDWISH); +// if (num < value){ +// // 修改次数 +// user.getHeroManager().putRandomType(1,value); +// } +// } } //修行技能数据兼容 private void calPractiveSkillData(User user) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetWishDrawCardInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetWishDrawCardInfoHandler.java index e82413b6c..7f2f8ee25 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetWishDrawCardInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetWishDrawCardInfoHandler.java @@ -4,14 +4,13 @@ import com.google.protobuf.GeneratedMessage; import com.ljsd.GameApplication; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.util.CBean2Proto; import org.springframework.stereotype.Component; -import rpc.protocols.CommonProto; -import rpc.protocols.HeroInfoProto; -import rpc.protocols.MessageTypeProto; +import rpc.protocols.*; import util.TimeUtils; import java.util.HashSet; @@ -25,33 +24,32 @@ import java.util.Set; * @Version 1.0 */ @Component -public class GetWishDrawCardInfoHandler extends BaseHandler { +public class GetWishDrawCardInfoHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { return MessageTypeProto.MessageType.choiceWishHeroRequest; } @Override - public GeneratedMessage processWithProto(int uid, HeroInfoProto.choiceWishHeroRequest proto) throws Exception { + public GeneratedMessage processWithProto(int uid, PlayerInfoProto.choiceWishHeroRequest proto) throws Exception { // 用户信息 User user = UserManager.getUser(uid); - if (user == null) { - throw new ErrorCodeException(ErrorCode.UNKNOWN); - } - - if (proto != null && proto.getInfoListCount() > 0){ - HeroLogic.getInstance().updateWishDrawCardInfo(user,proto.getInfoListList()); - } - // 心愿信息 - List wishCard = CBean2Proto.getWishCard(user); - // 开服时间 - int openTime = HeroLogic.getInstance().getServerOpenTimeByWishCard(); - Set heroList = new HashSet<>(); - if (openTime > 0){ - heroList = HeroLogic.getInstance().getWishOpenHeroList(user); + int type = proto.getType(); + Set set = new HashSet<>(); + int tmpId = 0; + switch (type){ + case 1://英雄卡池 + set = ActivityLogic.getInstance().getDesireOpenHeroList(user); + tmpId = user.getPlayerInfoManager().getDesireDraw().getOrDefault(type, 0); + break; + case 4://法宝卡池 + set = ActivityLogic.getInstance().getDesireOpenFabaoList(user); + tmpId = user.getPlayerInfoManager().getDesireDraw().getOrDefault(type, 0); + break; + default: + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); } // 更新的英雄列表 - return HeroInfoProto.choiceWishHeroResponse.newBuilder() - .addAllInfoList(wishCard).setServerOpenTime(openTime).addAllHeroList(heroList).build(); + return PlayerInfoProto.choiceWishHeroResponse.newBuilder().setDesireId(tmpId).addAllNewList(set).build(); } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java index 5009ff705..1ab1d361d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java @@ -60,16 +60,23 @@ public class StartHardStageRequestHandler extends BaseHandler dropList = new ArrayList(); SHardStage nodeConfig = SHardStage.getConfigMap().get(nodeId); - int page = nodeConfig.getChapter()%10 == 0? nodeConfig.getChapter()/10:nodeConfig.getChapter()/10+1; + + long createTime = user.getPlayerInfoManager().getCreateTime(); + int days = TimeUtils.getSoFarWentDays(createTime, TimeUtils.now()); + if (days < nodeConfig.getOpenTime()){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE, "关卡未开启"); + } + + int page = nodeConfig.getChapter() % 10 == 0 ? nodeConfig.getChapter() / 10 : nodeConfig.getChapter() / 10 + 1; Map chapterMap = user.getHardStageManager().getChapterMap(user); - if (!chapterMap.containsKey(nodeConfig.getChapter()) ||chapterMap.get(nodeConfig.getChapter()).getNode(nodeId) == null) { + if (!chapterMap.containsKey(nodeConfig.getChapter()) || chapterMap.get(nodeConfig.getChapter()).getNode(nodeId) == null) { //上一个节点 SHardStage preNodeConfig = SHardStage.getConfigMap().get(nodeConfig.getNextLevel()); - if(preNodeConfig != null){ - if(chapterMap.containsKey(preNodeConfig.getChapter())){ - for(int i=0;i< chapterMap.get(preNodeConfig.getChapter()).getNodeList().size();i++){ - if(chapterMap.get(preNodeConfig.getChapter()).getNodeList().get(i).getId() ==preNodeConfig.getId() - && chapterMap.get(preNodeConfig.getChapter()).getNodeList().get(i).isHasPass()){ + if (preNodeConfig != null) { + if (chapterMap.containsKey(preNodeConfig.getChapter())) { + for (int i = 0; i < chapterMap.get(preNodeConfig.getChapter()).getNodeList().size(); i++) { + if (chapterMap.get(preNodeConfig.getChapter()).getNodeList().get(i).getId() == preNodeConfig.getId() + && chapterMap.get(preNodeConfig.getChapter()).getNodeList().get(i).isHasPass()) { //开启新章节 新节点 if (user.getPlayerInfoManager().getLevel() >= nodeConfig.getLevelLimit()) { int level = user.getPlayerInfoManager().getLevel(); @@ -77,14 +84,14 @@ public class StartHardStageRequestHandler extends BaseHandler teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); @@ -102,7 +109,7 @@ public class StartHardStageRequestHandler extends BaseHandler0){ + if (starSum > 0) { Poster.getPoster().dispatchEvent(new ShanHeSheJiTuStarEvent(iSession.getUid(), 2, starSum)); //成就任务 - user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_STARS,starSum); + user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_STARS, starSum); user.getUserMissionManager().onGameEvent(user, GameEvent.MISTY_TRIP); } //大关卡通过成就+1 - if(nodeConfig.getStageType() == 1){ + if (nodeConfig.getStageType() == 1) { //nodeConfig int bigStageNumber = SHardStage.getBigStageNumberById(nodeConfig.getId()); - if( bigStageNumber>0 ){ - user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_NODE,bigStageNumber); + if (bigStageNumber > 0) { + user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_NODE, bigStageNumber); } } } } //参与奖励 - if(nodeConfig.getStageType()!= 2){ - user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_PARTICIPATION_REWARD,1); + if (nodeConfig.getStageType() != 2) { + user.getUserMissionManager().onGameEvent(user, GameEvent.HARSTAGE_PARTICIPATION_REWARD, 1); } //排行榜章节 int hardStageId = SHardStage.getStageIdByChapterAndSection(user.getHardStageManager().getCurChapter(), user.getHardStageManager().getCurNode()); @@ -242,18 +249,18 @@ public class StartHardStageRequestHandler extends BaseHandler(Arrays.asList(0,0,0))); //终身卡在线跨天 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index ae2b67fa9..c6066872d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -2028,4 +2028,73 @@ public class ActivityLogic implements IEventHandler{ } return 0; } + + /** + * 获取新加入的心愿英雄 + * + * @param user + * @return + */ + public Set getDesireOpenHeroList(User user) { + // 开服时间戳 + long openTime = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime()); + // 当前时间戳 + long now = TimeUtils.now(); + // 差值 + long time = now - openTime; + // set,存储最新的英雄列表 + HashSet set = new HashSet<>(); + // 全部的英雄列表 + Map heroMap = SCHero.getsCHero(); + // 满足条件的放入set + for (SCHero hero : heroMap.values()) { + if (time >= hero.getJoinWishDay()*TimeUtils.DAY){ + set.add(hero.getId()); + } + } + // set, 返回给客户端,最新的set + HashSet result = new HashSet<>(); + // 目前存储的全部set + Set heroList = user.getPlayerInfoManager().getDesireOpenHeroList(); + // 之前没有记录的为新开放,需要返回给客户端 + set.stream().filter(v -> !heroList.contains(v)).forEach(result::add); + // 更新玩家数据库 + user.getPlayerInfoManager().setDesireOpenHeroList(set); + return result; + } + + /** + * 获取新加入的心愿英雄 + * + * @param user + * @return + */ + public Set getDesireOpenFabaoList(User user) { + // 开服时间戳 + long openTime = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime()); + // 当前时间戳 + long now = TimeUtils.now(); + // 差值 + long time = now - openTime; + // set,存储最新的列表 + HashSet set = new HashSet<>(); + // 全部的英雄列表 + Map heroMap = SCHero.getsCHero(); + // 满足条件的放入set + for (SCHero hero : heroMap.values()) { + if (time >= hero.getJoinWishDay()*TimeUtils.DAY && hero.getEquipTalismana() != null && hero.getEquipTalismana().length > 1){ + set.add(hero.getEquipTalismana()[1]); + } + } + // set, 返回给客户端,最新的set + HashSet result = new HashSet<>(); + // 目前存储的全部set + Set fabaoList = user.getPlayerInfoManager().getDesireOpenFabaoList(); + // 之前没有记录的为新开放,需要返回给客户端 + set.stream().filter(v -> !fabaoList.contains(v)).forEach(result::add); + // 更新玩家数据库 + user.getPlayerInfoManager().setDesireOpenFabaoList(set); + return result; + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index 90d21936f..9c51c8ca2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -131,8 +131,9 @@ public interface ActivityType { int DAILY_SPECIAL = 10004;//每日特惠 int WHOLE_LIFE_CARD = 99;//终生卡 int WEEK_CARD = 102;//月卡 - int DRAW_LV_CHEST = 117;//抽卡等级宝箱 + int DRAW_HERO_LV_CHEST = 117;//抽卡等级宝箱 int FABAO_BOOK_REWARD = 118;//法宝图鉴宝箱 + int DRAW_FABAO_LV_CHEST = 119;//抽卡等级宝箱 //***************************************bt活动=====================================// diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index d6284f2bd..4ee62165c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -114,8 +114,9 @@ public enum ActivityTypeEnum { WHOEL_LIFE_ACTIVITY(ActivityType.WHOLE_LIFE_CARD,WholeLifeActivity::new),//终生卡 ENCHANTER_STORE(ActivityType.ENCHANTER_STORE,DefaultEmptyActivity::new),//寻仙商城 WEEK_CARD(ActivityType.WEEK_CARD,WeekCardActivity::new),//周卡 - DRAW_LV_CHEST(ActivityType.DRAW_LV_CHEST,DrawLvChestActivity::new),//抽卡等级宝箱 + DRAW_LV_CHEST(ActivityType.DRAW_HERO_LV_CHEST,DrawLvChestActivity::new),//抽卡等级宝箱 FABAO_BOOK_REWARD(ActivityType.FABAO_BOOK_REWARD,FabaoBookRewardActivity::new),//法宝图鉴宝箱 + DRAW_FABAO_LV_CHEST(ActivityType.DRAW_FABAO_LV_CHEST,DrawLvChestActivity::new),//抽卡等级宝箱 /****************************************************** bt **********************************************************/ BRUSH_PRIVILEGE(ActivityType.BRUSH_PRIVILEGE, BrushPrivilegeActivity::new),//刷充特权 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DrawLvChestActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DrawLvChestActivity.java index 105ba5857..3f813a3dc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DrawLvChestActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DrawLvChestActivity.java @@ -48,12 +48,13 @@ public class DrawLvChestActivity extends AbstractActivity { @Override public List getAllMissInfo(User user, ActivityMission activityMission, Set filter) { List missionInfo = new ArrayList<>(); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); // 验证活动是否开启 - if (activityMission == null){ + if (activityMission == null || activity == null){ return missionInfo; } Map map = SWishConfig.map; - int count = user.getHeroManager().getCountByDraw(1); + int count = user.getHeroManager().getCountByDraw(activity.getLotteryType()); Map progressInfoMap = activityMission.getActivityMissionMap(); for (SWishConfig config : map.values()) { int missionId = config.getId(); @@ -120,7 +121,8 @@ public class DrawLvChestActivity extends AbstractActivity { * @return */ boolean checkRewardsProcess(User user, SWishConfig config) { - int count = user.getHeroManager().getCountByDraw(1); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + int count = user.getHeroManager().getCountByDraw(activity.getLotteryType()); return count >= config.getDrawCardNumber(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FabaoBookRewardActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FabaoBookRewardActivity.java index 9189f66f3..7bc8bd7eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FabaoBookRewardActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/FabaoBookRewardActivity.java @@ -1,26 +1,19 @@ 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.EspecialEquipUpEvent; 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 com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MessageUtil; import config.SWishConfig; import rpc.protocols.CommonProto; -import rpc.protocols.PlayerInfoProto; -import java.text.MessageFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; /** * @author hj @@ -125,8 +118,7 @@ public class FabaoBookRewardActivity extends AbstractActivity { * @return */ boolean checkRewardsProcess(User user, SWishConfig config) { - int count = user.getHeroManager().getCountByDraw(1); - return count >= config.getDrawCardNumber(); + return true; } @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index d57bd5c08..7943a4eda 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -211,11 +211,6 @@ public class HeroManager extends MongoBase { updateString("LifeGridMap."+gridId, LifeGridMap.get(gridId)); } - /** - * 心愿可以选择的英雄列表 - */ - private Set wishOpenHeroList = new HashSet<>(); - /** * 变身卡列表 */ @@ -652,12 +647,6 @@ public class HeroManager extends MongoBase { updateString("wishDrawCardInfoMap", wishDrawCardInfoMap); } - public void putWishDrawCardInfoMap(WishDrawCardInfo wishDrawCardInfo) { - int key = wishDrawCardInfo.getId(); - wishDrawCardInfoMap.put(key,wishDrawCardInfo); - updateString("wishDrawCardInfoMap." + key, wishDrawCardInfo); - } - public HashMap getBeautyBagCardInfoMap() { return beautyBagCardInfoMap; } @@ -676,26 +665,6 @@ public class HeroManager extends MongoBase { updateString("trumpSelectItemMap", trumpSelectItemMap); } - - public void putBeautyBagCardInfoMap(Integer key,Integer val) { - this.beautyBagCardInfoMap.put(key,val); - updateString("beautyBagCardInfoMap", beautyBagCardInfoMap); - } - - public Set getWishOpenHeroList() { - return wishOpenHeroList; - } - - public void setWishOpenHeroList(Set wishOpenHeroList) { - this.wishOpenHeroList = wishOpenHeroList; - updateString("wishOpenHeroList", wishOpenHeroList); - } - - public void addWishOpenHeroList(int heroTid) { - wishOpenHeroList.add(heroTid); - updateString("wishOpenHeroList", wishOpenHeroList); - } - ///获取四象心法共鸣等级 public int GetSiXiangGongMingLv(){ int gongmingLv=0; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index f341a4014..76f94fa82 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -236,6 +236,21 @@ public class PlayerManager extends MongoBase { */ private HashSet heroDispatchAgos = new HashSet<>(); + /** + * 心愿可以选择的英雄列表 + */ + private Set desireOpenHeroList = new HashSet<>(); + + /** + * 心愿可以选择的法宝列表 + */ + private Set desireOpenFabaoList = new HashSet<>(); + + /** + * 选择的心愿 + */ + private Map desireDraw = new HashMap<>(); + public PlayerManager(){ this.setRootCollection(User._COLLECTION_NAME); } @@ -296,6 +311,33 @@ public class PlayerManager extends MongoBase { updateString("compensateMark", compensateMark); } + public Map getDesireDraw() { + return desireDraw; + } + + public void putDesireDraw(int type, int tempId) { + this.desireDraw.put(type, tempId); + updateString("desireDraw", desireDraw); + } + + public Set getDesireOpenHeroList() { + return desireOpenHeroList; + } + + public void setDesireOpenHeroList(Set set) { + this.desireOpenHeroList = set; + updateString("desireOpenHeroList", desireOpenHeroList); + } + + public Set getDesireOpenFabaoList() { + return desireOpenFabaoList; + } + + public void setDesireOpenFabaoList(Set set) { + this.desireOpenFabaoList = set; + updateString("desireOpenFabaoList", desireOpenFabaoList); + } + /** * 多对塔记录 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 84027692b..c8db52509 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -395,22 +395,27 @@ public class HeroLogic { // 参数 int type = sLotterySetting.getLotteryType(); int[] reward = sLotteryRewardConfig.getReward(); - // 限制满足次数 + // 心愿抽卡开次数启限制 int value = SSpecialConfig.getIntegerValue(SSpecialConfig.UNLOCKCARDWISH); // 对应卡池抽奖次数 Integer num = heroManager.getRandomCountByType().getOrDefault(type, 0); - // 心愿抽卡 - int[] result = reward; - if (type == 1 && num >= value) { - // 钻石抽卡并且次数满足 - result = wishDrawCardCheck(user, reward, type); - } else if (sLotterySetting.getLotteryType() == 3 && isActivityBeautyBag(sLotterySetting.getActivityId())) { - //乾坤宝盒-许愿魂印 + int[] result = null; + // 抽卡逻辑 + if (isActivityByIdAndType(sLotterySetting.getActivityId(), ActivityType.BEAUTY_BAG)) { + // 乾坤宝盒-许愿魂印 result = BeautyBagDrawCard(user, sLotteryRewardConfig); - } else if(isActivityByIdAndType(sLotterySetting.getActivityId(),ActivityType.TRUMP_GACHA_ACTIVITY)){ + } + else if(isActivityByIdAndType(sLotterySetting.getActivityId(),ActivityType.TRUMP_GACHA_ACTIVITY)){ // 天地烘炉 result = TrumpGachaDrawCard(user, sLotteryRewardConfig); } + else if (num >= value) { + // 心愿抽卡 + result = wishDrawCardCheck(user, reward, type); + }else { + // 默认奖励 + result = reward; + } //活动抽奖计数,触发活动 if (isActivityByIdAndType(sLotterySetting.getActivityId(), ActivityType.BEAUTY_BAG)) { @@ -498,15 +503,6 @@ public class HeroLogic { return result; } - private boolean isActivityBeautyBag(int activityId) { - SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(activityId); - if (activity == null) { - return false; - } - - return activity.getType() == ActivityType.BEAUTY_BAG; - } - private boolean isActivityByIdAndType(int activityId, int activityType) { SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(activityId); if (activity == null) { @@ -540,15 +536,15 @@ public class HeroLogic { int randomInt = MathUtils.randomInt(10000); if (randomInt <= weight){ // 读取格子信息 - WishDrawCardInfo cardInfo = user.getHeroManager().getWishDrawCardInfoMap().get(1); + Integer integer = user.getPlayerInfoManager().getDesireDraw().getOrDefault(type, 0); // null表示未中心愿, 该格子已锁定, 是空格子 - if (cardInfo == null || cardInfo.getStatus() == 1 || cardInfo.getHeroTid() == 0) { + if (integer == 0) { return item; } // new int[] int[] result = new int[2]; // 赋值物品id和数量 - result[0] = cardInfo.getHeroTid(); + result[0] = integer; result[1] = item[1]; return result; } @@ -628,23 +624,23 @@ public class HeroLogic { * * @param user */ - private void sendWishCardIndication(User user) { - List wishCard = CBean2Proto.getWishCard(user); - HeroInfoProto.wishDrawCardIndication.Builder list = HeroInfoProto.wishDrawCardIndication.newBuilder().addAllInfoList(wishCard); - MessageUtil.sendIndicationMessage(user.getId(), list.build()); - } +// private void sendWishCardIndication(User user) { +// List wishCard = CBean2Proto.getWishCard(user); +// HeroInfoProto.wishDrawCardIndication.Builder list = HeroInfoProto.wishDrawCardIndication.newBuilder().addAllInfoList(wishCard); +// MessageUtil.sendIndicationMessage(user.getId(), list.build()); +// } /** * 重置心愿格子信息 */ - public void resetWishDrawCardInfoMap(User user) { - // 重置状态 - HashMap map = user.getHeroManager().getWishDrawCardInfoMap(); - map.values().forEach(v -> v.setStatus(0)); - user.getHeroManager().setWishDrawCardInfoMap(map); - // 推送消息 - sendWishCardIndication(user); - } +// public void resetWishDrawCardInfoMap(User user) { +// // 重置状态 +// HashMap map = user.getHeroManager().getWishDrawCardInfoMap(); +// map.values().forEach(v -> v.setStatus(0)); +// user.getHeroManager().setWishDrawCardInfoMap(map); +// // 推送消息 +// sendWishCardIndication(user); +// } /** * 修改英雄格子 @@ -653,81 +649,51 @@ public class HeroLogic { * @param list * @throws ErrorCodeException */ - public void updateWishDrawCardInfo(User user, List list) throws ErrorCodeException { - HashMap wishDrawCardInfoMap = user.getHeroManager().getWishDrawCardInfoMap(); - - // 英雄拷贝 - HashMap map = new HashMap<>(wishDrawCardInfoMap.size()); - wishDrawCardInfoMap.forEach((k, v) -> { - try { - map.put(k, v.clone()); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - }); - - // 遍历 - for (CommonProto.wishDrawCardInfo v : list) { - WishDrawCardInfo cardInfo = map.get(v.getId()); - // 英雄未锁定 - if (cardInfo != null && cardInfo.getStatus() == 0) { - // 替换英雄 - cardInfo.setHeroTid(v.getHeroTid()); - } - } - - // 获取已选择英雄的类型set集合 - Set race = new HashSet<>(); - map.values().forEach(v -> { - if (v.getHeroTid() != 0) { - SCHero scHero = SCHero.getsCHero().get(v.getHeroTid()); - race.add(scHero.getPropertyName()); - } - }); - - // 去除空格子后队列的长度 - List infos = new ArrayList<>(map.values()); - infos.removeIf(v -> v.getHeroTid() == 0); - - // 类型唯一, 如果长度不一致代表有重复类型英雄 - if (race.size() != infos.size()) { - throw new ErrorCodeException("有重复类型英雄,替换失败"); - } - // 入库 - else { - user.getHeroManager().setWishDrawCardInfoMap(map); - } - } - - /** - * 获取可以加入 - * - * @param user - * @return - */ - public Set getWishOpenHeroList(User user) { - // 开服时间戳 - long openTime = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime()); - // 当前时间戳 - long now = TimeUtils.now(); - // 差值 - long time = now - openTime; - // set,存储最新的英雄列表 - HashSet set = new HashSet<>(); - // 全部的英雄列表 - Map heroMap = SCHero.getsCHero(); - // 满足条件的放入set - heroMap.values().stream().filter(v -> v.getJoinWishDay() > 0 && time >= v.getJoinWishDay() * TimeUtils.DAY).forEach(v -> set.add(v.getId())); - // set, 返回给客户端,最新的set - HashSet result = new HashSet<>(); - // 目前存储的全部set - Set heroList = user.getHeroManager().getWishOpenHeroList(); - // 之前没有记录的为新开放,需要返回给客户端 - set.stream().filter(v -> !heroList.contains(v)).forEach(result::add); - // 更新玩家数据库 - user.getHeroManager().setWishOpenHeroList(set); - return result; - } +// public void updateWishDrawCardInfo(User user, List list) throws ErrorCodeException { +// HashMap wishDrawCardInfoMap = user.getHeroManager().getWishDrawCardInfoMap(); +// +// // 英雄拷贝 +// HashMap map = new HashMap<>(wishDrawCardInfoMap.size()); +// wishDrawCardInfoMap.forEach((k, v) -> { +// try { +// map.put(k, v.clone()); +// } catch (CloneNotSupportedException e) { +// e.printStackTrace(); +// } +// }); +// +// // 遍历 +// for (CommonProto.wishDrawCardInfo v : list) { +// WishDrawCardInfo cardInfo = map.get(v.getId()); +// // 英雄未锁定 +// if (cardInfo != null && cardInfo.getStatus() == 0) { +// // 替换英雄 +// cardInfo.setHeroTid(v.getHeroTid()); +// } +// } +// +// // 获取已选择英雄的类型set集合 +// Set race = new HashSet<>(); +// map.values().forEach(v -> { +// if (v.getHeroTid() != 0) { +// SCHero scHero = SCHero.getsCHero().get(v.getHeroTid()); +// race.add(scHero.getPropertyName()); +// } +// }); +// +// // 去除空格子后队列的长度 +// List infos = new ArrayList<>(map.values()); +// infos.removeIf(v -> v.getHeroTid() == 0); +// +// // 类型唯一, 如果长度不一致代表有重复类型英雄 +// if (race.size() != infos.size()) { +// throw new ErrorCodeException("有重复类型英雄,替换失败"); +// } +// // 入库 +// else { +// user.getHeroManager().setWishDrawCardInfoMap(map); +// } +// } /** * 从抽卡获取服务器开服时间 diff --git a/tablemanager/src/main/java/config/SGlobalActivity.java b/tablemanager/src/main/java/config/SGlobalActivity.java index e43a90fa3..5f4974926 100644 --- a/tablemanager/src/main/java/config/SGlobalActivity.java +++ b/tablemanager/src/main/java/config/SGlobalActivity.java @@ -51,10 +51,12 @@ public class SGlobalActivity implements BaseConfig { private int privilege; - public static Map> sGlobalActivityMapByType; - public static Map> sGlobalActivityMapByOpenRules; + private int lotteryType; - public static Map sRechargeId2ActivityId; + public static Map> sGlobalActivityMapByType; + public static Map> sGlobalActivityMapByOpenRules; + + public static Map sRechargeId2ActivityId; @Override public void init() throws Exception { Map> sGlobalActivityMapByTypeTmp = new HashMap<>(); @@ -241,4 +243,8 @@ public class SGlobalActivity implements BaseConfig { public int getPrivilege() { return privilege; } + + public int getLotteryType() { + return lotteryType; + } } \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SHardStage.java b/tablemanager/src/main/java/config/SHardStage.java index 4c9c33a1d..342ccf585 100644 --- a/tablemanager/src/main/java/config/SHardStage.java +++ b/tablemanager/src/main/java/config/SHardStage.java @@ -27,6 +27,8 @@ public class SHardStage implements BaseConfig { private int levelLimit; + private int openTime; + private int star; private int monsterGroup; @@ -161,8 +163,8 @@ public class SHardStage implements BaseConfig { return bigStageNumber; } - public void setBigStageNumber(int bigStageNumber) { - this.bigStageNumber = bigStageNumber; + public int getOpenTime() { + return openTime; } public static int getStageIdByChapterAndSection(int chapter, int section){