diff --git a/netty/src/main/java/com/ljsd/jieling/netty/server/NettyGameServer.java b/netty/src/main/java/com/ljsd/jieling/netty/server/NettyGameServer.java index 4a1ab9e01..7ef6e6be4 100644 --- a/netty/src/main/java/com/ljsd/jieling/netty/server/NettyGameServer.java +++ b/netty/src/main/java/com/ljsd/jieling/netty/server/NettyGameServer.java @@ -29,6 +29,8 @@ import java.util.concurrent.TimeUnit; *

*

* 1 netty 回调channel回来加连接限制 + * + * 外观模式 控制类 */ public class NettyGameServer extends AbstractServer { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/MapStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/MapStaticConfig.java index adba3b966..2cf60604e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/MapStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/MapStaticConfig.java @@ -23,8 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; public class MapStaticConfig extends AbstractClassStaticConfig { - private Map difficultyMonster; - private Map difficultyReward; + private Map monsterMap; @@ -37,12 +36,6 @@ public class MapStaticConfig extends AbstractClassStaticConfig { @Override public void figureConfigs() { - try { - setDifficult(); - } catch (Exception e) { - LOGGER.error("SEndlessDifficulty init fail"); - } - try { Map monsterMapVo = new ConcurrentHashMap<>(); for (Map.Entry entry : STableManager.getConfig(SMonsterConfig.class).entrySet()){ @@ -64,44 +57,10 @@ public class MapStaticConfig extends AbstractClassStaticConfig { } - public Map getDifficultyMonster() { - return difficultyMonster; - } - - public Map getDifficultyReward() { - return difficultyReward; - } public Map getMonsterMap() { return monsterMap; } - public void setDifficult() throws Exception { - SEndlessDifficulty baseDiff = STableManager.getConfig(SEndlessDifficulty.class).get(1); - difficultyMonster = new HashMap<>(); - difficultyReward = new HashMap<>(); - ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); - if (serverConfigTmp.getWorldLevel() == 0) { - for (int i = 0; i < baseDiff.getMonsterId().length; i++) { - difficultyMonster.put(baseDiff.getMonsterId()[i], baseDiff.getMonsterId()[i]); - } - for (int i = 0; i < baseDiff.getRewardId().length; i++) { - difficultyReward.put(baseDiff.getRewardId()[i], baseDiff.getRewardId()[i]); - } - } else { - for (Map.Entry entry : STableManager.getConfig(SEndlessDifficulty.class).entrySet()) { - if (serverConfigTmp.getWorldLevel() <= entry.getValue().getWorldLevel()[0] || serverConfigTmp.getWorldLevel() > entry.getValue().getWorldLevel()[1]) { - continue; - } - for (int i = 0; i < baseDiff.getMonsterId().length; i++) { - difficultyMonster.put(baseDiff.getMonsterId()[i], entry.getValue().getMonsterId()[i]); - } - for (int i = 0; i < baseDiff.getRewardId().length; i++) { - difficultyReward.put(baseDiff.getRewardId()[i], entry.getValue().getRewardId()[i]); - } - break; - } - } - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/function/EndlessFunction.java b/serverlogic/src/main/java/com/ljsd/jieling/core/function/EndlessFunction.java index 23674a556..cfe7b8694 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/function/EndlessFunction.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/function/EndlessFunction.java @@ -38,7 +38,6 @@ public class EndlessFunction implements FunctionManager { int level = calWorldLevel(); MapLogic.getInstance().updateEndlessSeason(timeControllerOfFunction.getTimes()); serverConfigTmp.setWorldLevel(level); - STableManager.getFigureConfig(MapStaticConfig.class).setDifficult(); MongoUtil.getLjsdMongoTemplate().save(serverConfigTmp); MapLogic.getInstance().setEndlessMapId(GlobalDataManaager.getEndleeMapIdByLevel()); Map onlineUserMap = OnlineUserManager.sessionMap; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 392c040e4..566e54310 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -188,6 +188,10 @@ public interface BIReason { int CHAMPIION_BET_CONSUME = 1046; //巅峰赛竞猜消耗 + int MISSING_ROOM_REFRESH_CONSUME = 1047;//迷宫寻宝刷新消耗 + + int MISSING_ROOM_SEND_CONSUME = 1048;//迷宫寻宝派遣消耗 + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 62717c861..7ffb3f24c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -6,6 +6,7 @@ import com.ljsd.jieling.config.clazzStaticCfg.MapStaticConfig; import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; @@ -55,6 +56,9 @@ public class MapLogic { private Map baseBehaviorMap = new HashMap<>(); + private Map difficultyMonster; + private Map difficultyReward; + private static int endlessSeason; private static int endlessMapId; @@ -62,11 +66,12 @@ public class MapLogic { public static final int STAR_2 = 2; // 100% 探索度 public static final int STAR_3 = 3; // 复活次数少于N次 - public void init() { + public void init() throws Exception { Map beansOfType = ConfigurableApplicationContextManager.getBeansOfType(BaseBehavior.class); for (BaseBehavior baseBehavior : beansOfType.values()) { baseBehaviorMap.put(baseBehavior.getBehaviorType(), baseBehavior); } + setDifficult(); } private MapLogic() { @@ -1223,7 +1228,7 @@ public class MapLogic { } int groupId = option[0]; if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4) { - Integer newGroupId= STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().get(groupId); + Integer newGroupId= getDifficultyMonster().get(groupId); if(newGroupId!=null){ groupId = newGroupId; } @@ -1402,8 +1407,8 @@ public class MapLogic { String[] split = fightReady.split("#"); RedisUtil.getInstence().del(fightReadyKey); groupId = Integer.parseInt(split[0]); - if(STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().containsKey(groupId)){ - groupId = STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().get(groupId); + if(getDifficultyMonster().containsKey(groupId)){ + groupId = getDifficultyMonster().get(groupId); } if (split.length > 1) { pointId = split[1]; @@ -1416,8 +1421,8 @@ public class MapLogic { } groupId = option[0]; if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4) { - if(STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().containsKey(groupId)){ - groupId = STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().get(groupId); + if(getDifficultyMonster().containsKey(groupId)){ + groupId = getDifficultyMonster().get(groupId); } } } @@ -3155,8 +3160,9 @@ public class MapLogic { * 无尽副本设置当前mapId * @param endlessMapId */ - public static void setEndlessMapId(int endlessMapId) { + public static void setEndlessMapId(int endlessMapId) throws Exception { MapLogic.endlessMapId = endlessMapId; + getInstance().setDifficult(); } public static int getEndlessMapId() { @@ -3300,7 +3306,43 @@ public class MapLogic { MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); } + public void setDifficult() throws Exception { + SEndlessDifficulty baseDiff = STableManager.getConfig(SEndlessDifficulty.class).get(1); + difficultyMonster = new HashMap<>(); + difficultyReward = new HashMap<>(); + ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); + if (serverConfigTmp.getWorldLevel() == 0) { + for (int i = 0; i < baseDiff.getMonsterId().length; i++) { + difficultyMonster.put(baseDiff.getMonsterId()[i], baseDiff.getMonsterId()[i]); + } + for (int i = 0; i < baseDiff.getRewardId().length; i++) { + difficultyReward.put(baseDiff.getRewardId()[i], baseDiff.getRewardId()[i]); + } + } else { + for (Map.Entry entry : STableManager.getConfig(SEndlessDifficulty.class).entrySet()) { + if (serverConfigTmp.getWorldLevel() <= entry.getValue().getWorldLevel()[0] || serverConfigTmp.getWorldLevel() > entry.getValue().getWorldLevel()[1]) { + continue; + } + for (int i = 0; i < baseDiff.getMonsterId().length; i++) { + difficultyMonster.put(baseDiff.getMonsterId()[i], entry.getValue().getMonsterId()[i]); + } + for (int i = 0; i < baseDiff.getRewardId().length; i++) { + difficultyReward.put(baseDiff.getRewardId()[i], entry.getValue().getRewardId()[i]); + } + + break; + } + } + } public static int getEndlessSeason() { return endlessSeason; } + + public Map getDifficultyMonster() { + return difficultyMonster; + } + + public Map getDifficultyReward() { + return difficultyReward; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomAccelerateHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomAccelerateHandler.java new file mode 100644 index 000000000..0f1fd50fa --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomAccelerateHandler.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.handler.missingRoom; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.mission.MissionLoigc; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + +/** + * @author lvxinran + * @date 2019/12/13 + * @discribe + */ +@Component +public class MissingRoomAccelerateHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.MISSING_ROOM_MISSION_ACCELERATE_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, PlayerInfoProto.MissingRoomAccelerateRequest proto) throws Exception { + MissionLoigc.missingRoomAccelerate(iSession,proto.getMissionId(),MessageTypeProto.MessageType.MISSING_ROOM_MISSION_ACCELERATE_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java new file mode 100644 index 000000000..f618b8466 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java @@ -0,0 +1,41 @@ +package com.ljsd.jieling.handler.missingRoom; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.MissionLoigc; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import com.ljsd.jieling.util.MessageUtil; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lvxinran + * @date 2019/12/12 + * @discribe + */ +@Component +public class MissingRoomRefreshHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.MISSING_ROOM_MISSION_REFRESH_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + User user = UserManager.getUser(iSession.getUid()); + user.getUserMissionManager().onGameEvent(user, GameEvent.MISSING_ROOM_REFRESH,1); + List userMissionInfos = new ArrayList<>(); + MissionLoigc.getMissingRoomMission(user,userMissionInfos); + PlayerInfoProto.MissingRoomRefreshResponse response = PlayerInfoProto.MissingRoomRefreshResponse.newBuilder().addAllInfos(userMissionInfos).build(); + MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.MISSING_ROOM_MISSION_REFRESH_RESPONSE_VALUE,response,true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java new file mode 100644 index 000000000..078117d15 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.handler.missingRoom; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.mission.MissionLoigc; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + +/** + * @author lvxinran + * @date 2019/12/12 + * @discribe + */ +@Component +public class MissingRoomSendHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.MISSING_ROOM_HERO_SEND_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, PlayerInfoProto.MissingRoomSendHeroRequest proto) throws Exception { + MissionLoigc.missingRoomSendHero(iSession,proto.getHeroIdsList(),proto.getMissionId(), MessageTypeProto.MessageType.MISSING_ROOM_HERO_SEND_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/vip/VipTakeDailyHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/vip/VipTakeDailyHandler.java index c2e639b26..260cfe543 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/vip/VipTakeDailyHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/vip/VipTakeDailyHandler.java @@ -34,7 +34,7 @@ public class VipTakeDailyHandler extends BaseHandler> missionTypeEnumListMap, Object... parm){ + public void openMission(User user,GameEvent event,Map> missionTypeEnumListMap, Object... parm) throws Exception { ISession session= OnlineUserManager.getSessionByUid(user.getId()); switch (event){ case VIP_LEVLUP:{ @@ -157,6 +157,38 @@ public class UserMissionManager extends MongoBase { bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds); updateString("bloodyMissionIdsType",bloodyMissionIdsType); break; + case MISSING_ROOM_REFRESH: + if((int)parm[0]==1){ + boolean result; + SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1); + result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + if(!result){ + result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + if(!result){ + int[][] cost = sMazeTreasureSetting.getCost(); + int count = (int)MathUtils.calABX(missingRoomMissionType.getCoinRefreshCount(), cost[1]); + result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + + } + } + if(!result){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + missingRoomMissionType.getDoingMissionIds().clear(); + } + int[][] missingRoomMission = new int[SMazeTreasure.sMazeTreasureMap.size()][]; + for(Map.Entry entry:SMazeTreasure.sMazeTreasureMap.entrySet()){ + int[] refreshWeight = new int[2]; + refreshWeight[0] = entry.getKey(); + refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); + missingRoomMission[entry.getKey()-1] =refreshWeight; + } + int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission, 6); + for(int mission:missions){ + missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); + } + updateString("missingRoomMissionType",missingRoomMissionType); + break; } } @@ -203,6 +235,13 @@ public class UserMissionManager extends MongoBase { updateString("bloodyMissionIdsType",bloodyMissionIdsType); } break; + case MISSING_ROOM_MISSION_REWARD:{ + missingRoomMissionType.rewardMission((int)parm[0],missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION)); + updateString("missingRoomMissionType",missingRoomMissionType); + } + break; + default: + break; } } @@ -413,4 +452,8 @@ public class UserMissionManager extends MongoBase { public CumulationData getTreasureMonthCumulationData() { return treasureMonthCumulationData; } + + public MissingRoomMissionType getMissingRoomMissionType() { + return missingRoomMissionType; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java index c68e4a529..b5c6dfd04 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java @@ -8,6 +8,7 @@ public enum GameEvent { TREASH_WEEK_REFRESH,//孙龙的宝藏周任务 TREASH_MONTH_REFRESH,//孙龙的宝藏月任务 SERVENHAPPY_REFRESH,//七日狂欢 + MISSING_ROOM_REFRESH,//迷宫寻宝刷新 BEGINNER,//新手 RANDOM_HERO,// 抽卡 @@ -31,6 +32,7 @@ public enum GameEvent { BLOODY_MISSION_REWARD, //血战任务领取 TREASURE_MISSION_REWARD,// 领取孙龙的宝藏 SEVENHAPPY_MISSION_REWARD,// 领取孙龙的宝藏 + MISSING_ROOM_MISSION_REWARD,//迷宫寻宝领奖 WORKSHOP_CREATE_EQUIP,//打造装备 ADVENTURE_TAKEREWARD, //收取秘境奖励 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java index a4f2288cd..2b26bc20d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java @@ -8,6 +8,7 @@ public enum GameMisionType { SEVENMISSION(5), BEGINNERMISSION(6), BLOODYMISSION(7), + MISSINGROOMMISSION(8), ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index f8a9ff42d..6751d3d20 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -43,6 +43,7 @@ public class MissionLoigc { getTreasureMission(user,missionList,ActivityType.SERVERHAPPY); getBeginnerMisssion(user,missionList); getBloodyMisison(user,missionList); + getMissingRoomMission(user,missionList); PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true); } @@ -285,6 +286,24 @@ public class MissionLoigc { missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(vipmissionType).setProgress(progrss).build()); } } + public static void getMissingRoomMission(User user ,List missionList){ + UserMissionManager userMissionManager = user.getUserMissionManager(); + MissingRoomMissionType missingRoomMissionType = userMissionManager.getMissingRoomMissionType(); + for(Integer missionId:missingRoomMissionType.getDoingMissionIds()){ + CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); + info.setMissionId(missionId).setState(0) + .setType(GameMisionType.MISSINGROOMMISSION.getType()); + missionList.add(info.build()); + } + for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){ + CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); + int missingTime = missingRoomMissionType.getMissingTime(missionId); + info.setMissionId(missionId).setState(missingTime>0?0:missingTime==0?1:2) + .setType(GameMisionType.MISSINGROOMMISSION.getType()) + .setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo(missionId)); + missionList.add(info.build()); + } + } public static void takeMissionReward(ISession session,int type,int missionId) throws Exception { int uid = session.getUid(); @@ -366,6 +385,10 @@ public class MissionLoigc { Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.SEVENHAPPY_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.SEVENMISSION); } + if(type==GameMisionType.MISSINGROOMMISSION.getType()){ + Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.MISSING_ROOM_MISSION_REWARD, missionId); + missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.MISSINGROOMMISSION); + } if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){ CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), BIReason.TAKE_MISSION_REWARD); @@ -665,7 +688,26 @@ public class MissionLoigc { } return count; } - + public static void missingRoomSendHero(ISession session, List hero,int missionId, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + MissingRoomMissionType missingRoomMissionType = user.getUserMissionManager().getMissingRoomMissionType(); + missingRoomMissionType.heroSend(user,hero,missionId); + user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType); + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); + } + //迷宫寻宝加速 + public static void missingRoomAccelerate(ISession session,int missionId, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + MissingRoomMissionType missingRoomMissionType = user.getUserMissionManager().getMissingRoomMissionType(); + Set finishMissionIds = missingRoomMissionType.getFinishMissionIds(); + if(finishMissionIds.contains(missionId)){ + missingRoomMissionType.setMissingTime(missionId,0); + }else { + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType); + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java index 5c18a0ebd..24d4227a9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java @@ -37,6 +37,7 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.TREASH_MONTH_REFRESH,new TreasureRefreshEventProcess()); eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new TreasureRefreshEventProcess()); eventProcessor.put(GameEvent.BEGINNER,new BeginneRefreshEventProcessor()); + eventProcessor.put(GameEvent.MISSING_ROOM_REFRESH,new DailyRefreshEventProcess()); List typeList = new ArrayList<>(); typeList.add(MissionType.RECRUITMENT_RANDOM_HEROES); @@ -175,6 +176,8 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.SEVENHAPPY_MISSION_REWARD,new RewardEventProcessor()); eventProcessor.put(GameEvent.BEGINNER_MISSION_REWARD,new RewardEventProcessor()); eventProcessor.put(GameEvent.BLOODY_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.MISSING_ROOM_MISSION_REWARD,new RewardEventProcessor()); + typeList = new ArrayList<>(); typeList.add(MissionType.RING_FIREA_DVANCED); @@ -306,6 +309,8 @@ public class MissionEventDistributor { missionTypeEnumListMap.put(GameMisionType.SEVENMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.BEGINNERMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.BLOODYMISSION, new ArrayList<>()); + missionTypeEnumListMap.put(GameMisionType.MISSINGROOMMISSION, new ArrayList<>()); + } else { missionTypeEnumListMap.get(GameMisionType.VIPMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.DAILYMISSION).clear(); @@ -314,6 +319,8 @@ public class MissionEventDistributor { missionTypeEnumListMap.get(GameMisionType.SEVENMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.BEGINNERMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION).clear(); + missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION).clear(); + } threadMissionChangeList.set(missionTypeEnumListMap); } @@ -334,7 +341,6 @@ public class MissionEventDistributor { if(builder.getUserMissionInfoCount()>0){ MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.MISSION_UPDATE_INDICATION_VALUE,builder.build(),true); } - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java new file mode 100644 index 000000000..bef24d9bb --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java @@ -0,0 +1,135 @@ +package com.ljsd.jieling.logic.mission.main; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.MissionState; +import com.ljsd.jieling.util.ItemUtil; +import config.SCHero; +import config.SMazeTreasure; +import util.TimeUtils; + +import java.util.*; + +/** + * @author lvxinran + * @date 2019/12/14 + * @discribe + */ +public class MissingRoomMissionType extends AbstractMissionType{ + private Map missingTime = new HashMap<>(); + private Map> heroesInfo = new HashMap<>(); + private int missionIndex; + private int coinRefreshCount; + + @Override + public void openMission(User user, int missionId, List missionTypeEnumList) { + + + + + + } + + @Override + public int[][] reward(int missionId) { + int realId = missionId % 10000; + return SMazeTreasure.sMazeTreasureMap.get(realId).getReward(); + } + + @Override + public void rewardMission(int missionId, List missionTypeEnumListMap) { + + if(!missingTime.containsKey(missionId)||!getFinishMissionIds().contains(missionId)){ + return; + } + if(missingTime.get(missionId)!=0&&missingTime.get(missionId)>TimeUtils.now()/1000){ + return; + } + missingTime.put(missionId,-1); + MissionStateChangeInfo stateChangeInfo = new MissionStateChangeInfo(missionId, MissionState.REWARD, reward(missionId)); + missionTypeEnumListMap.add(stateChangeInfo); + } + + @Override + public void calCumulationDataResult(User user, CumulationData.Result result, List missionStateChangeInfos, CumulationData cumulationData) { + + } + + public void heroSend(User user ,List heroes,int missionId) throws Exception { + if(!getDoingMissionIds().contains(missionId)){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + Set sentHeroes = new HashSet<>(); + for(List heroesList:heroesInfo.values()){ + sentHeroes.addAll(heroesList); + } + for(String hero:heroes){ + if(sentHeroes.contains(hero)){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + } + int realId = missionId%10000; + SMazeTreasure sMazeTreasure = SMazeTreasure.sMazeTreasureMap.get(realId); + if(heroes.size()>sMazeTreasure.getNeedCard()){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + int[][] condition = sMazeTreasure.getCondition(); + int star = 0; + int type = 0; + for(int[] cond:condition) { + if(cond[0]==1){ + star = cond[1]; + }else if(cond[0]==2){ + type = type | (1<=star){ + star = 0; + } + int propertyName = SCHero.getsCHero().get(hero.getTemplateId()).getPropertyName(); + int propValue = 1<<(propertyName-1); + type = (type |propValue) ^ propValue; + } + if(star!=0||type!=0){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + boolean itemCost = ItemUtil.itemCost(user, new int[][]{sMazeTreasure.getTakeItem()}, BIReason.MISSING_ROOM_SEND_CONSUME, 1); + if(!itemCost){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + getDoingMissionIds().remove(missionId); + getFinishMissionIds().add(missionId); + missingTime.put(missionId, (int)(TimeUtils.now()/1000)+sMazeTreasure.getWasteTime()); + heroesInfo.put(missionId,heroes); + } + + public int getMissingTime(int missionId) { + return missingTime.get(missionId); + } + public void setMissingTime(int missionId,int time){ + missingTime.put(missionId,time); + } + + public List getHerosInfo(int missionId) { + return heroesInfo.get(missionId); + } + + public int getMissionIndex() { + missionIndex++; + return missionIndex; + } + + public int getCoinRefreshCount() { + return coinRefreshCount; + } + + public void setCoinRefreshCount(int coinRefreshCount) { + this.coinRefreshCount = coinRefreshCount; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index b80a4592d..61eb72c88 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -9,6 +9,7 @@ import com.ljsd.jieling.dataReport.reportBeans_37.Repot37EventUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.GlobalItemType; +import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.ktbeans.KtEventUtils; @@ -160,8 +161,8 @@ public class ItemUtil { private static void combineRewardDropGroup(User user, int[] dropGroupIds, float dropRatio, Map itemMap, Map cardMap, Map equipMap, Map randomMap) { for (int dropGroupId : dropGroupIds) { - if(STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyReward().containsKey(dropGroupId)){ - dropGroupId =STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyReward().get(dropGroupId); + if(MapLogic.getInstance().getDifficultyReward().containsKey(dropGroupId)){ + dropGroupId =MapLogic.getInstance().getDifficultyReward().get(dropGroupId); } SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId); if (sRewardGroup == null) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java index af0c628ea..906f58db8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.util; import com.ljsd.jieling.config.clazzStaticCfg.MapStaticConfig; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.protocols.CommonProto; import config.SMonsterConfig; import config.SMonsterGroup; @@ -89,8 +90,8 @@ public class MonsterUtil { Map integerSMonsterConfigMap = STableManager.getConfig(SMonsterConfig.class); int maxForce = 0; for(int i = 0 ; i < groupIds.length;i++){ - if(STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().containsKey(groupIds[i])){ - groupIds[i]= STableManager.getFigureConfig(MapStaticConfig.class).getDifficultyMonster().get(groupIds[i]); + if(MapLogic.getInstance().getDifficultyMonster().containsKey(groupIds[i])){ + groupIds[i]= MapLogic.getInstance().getDifficultyMonster().get(groupIds[i]); } SMonsterGroup sMonsterGroup = integerSMonsterGroupMap.get(groupIds[i]); int[][] contents = sMonsterGroup.getContents(); diff --git a/tablemanager/src/main/java/config/SMazeTreasure.java b/tablemanager/src/main/java/config/SMazeTreasure.java new file mode 100644 index 000000000..344fa3ab5 --- /dev/null +++ b/tablemanager/src/main/java/config/SMazeTreasure.java @@ -0,0 +1,75 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + + +@Table(name ="MazeTreasure") +public class SMazeTreasure implements BaseConfig { + + private int id; + + private int taskType; + + private int taskRefreshProbability; + + private int[] takeItem; + + private int wasteTime; + + private int[] speedUpTake; + + private int[][] reward; + + private int[][] condition; + + private int needCard; + + public static Map sMazeTreasureMap; + + @Override + public void init() throws Exception { + sMazeTreasureMap = STableManager.getConfig(SMazeTreasure.class); + } + + + public int getId() { + return id; + } + + public int getTaskType() { + return taskType; + } + + public int getTaskRefreshProbability() { + return taskRefreshProbability; + } + + public int[] getTakeItem() { + return takeItem; + } + + public int getWasteTime() { + return wasteTime; + } + + public int[] getSpeedUpTake() { + return speedUpTake; + } + + public int[][] getReward() { + return reward; + } + + public int[][] getCondition() { + return condition; + } + + public int getNeedCard() { + return needCard; + } + + +} \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SMazeTreasureSetting.java b/tablemanager/src/main/java/config/SMazeTreasureSetting.java new file mode 100644 index 000000000..3642843bb --- /dev/null +++ b/tablemanager/src/main/java/config/SMazeTreasureSetting.java @@ -0,0 +1,68 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + + +@Table(name ="MazeTreasureSetting") +public class SMazeTreasureSetting implements BaseConfig { + + private int refreshType; + + private int needItem; + + private int refreshNum; + + private int[] takeOrder; + + private int[] refreshItem; + + private int[][] cost; + + private int[][] refreshHighTypeNum; + + private int[][] dailyPrivilege; + + public static Map sMazeTreasureSettingMap; + + + @Override + public void init() throws Exception { + sMazeTreasureSettingMap = STableManager.getConfig(SMazeTreasureSetting.class); + } + + + public int getRefreshType() { + return refreshType; + } + + public int getNeedItem() { + return needItem; + } + + public int getRefreshNum() { + return refreshNum; + } + + public int[] getRefreshItem() { + return refreshItem; + } + + public int[][] getCost() { + return cost; + } + + public int[][] getRefreshHighTypeNum() { + return refreshHighTypeNum; + } + + public int[][] getDailyPrivilege() { + return dailyPrivilege; + } + + public int[] getTakeOrder() { + return takeOrder; + } +} \ No newline at end of file