From 19944b900953d7da1fe7ea873c9ae54dd10edb04 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 13 Dec 2019 18:02:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E5=B0=BD=E7=AD=89=E7=BA=A7=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E8=BF=B7=E5=AE=AB=E5=AF=BB=E5=AE=9D=E6=B4=BE?= =?UTF-8?q?=E9=81=A3=E5=8A=A0=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clazzStaticCfg/MapStaticConfig.java | 43 +------------- .../core/function/EndlessFunction.java | 1 - .../ljsd/jieling/handler/map/MapLogic.java | 56 ++++++++++++++++--- .../MissingRoomAccelerateHandler.java | 26 +++++++++ .../jieling/logic/dao/UserMissionManager.java | 1 + .../jieling/logic/mission/MissionLoigc.java | 21 ++++++- .../event/MissionEventDistributor.java | 2 + .../mission/main/MissingRoomMissionType.java | 34 +++++++---- .../java/com/ljsd/jieling/util/ItemUtil.java | 5 +- .../com/ljsd/jieling/util/MonsterUtil.java | 5 +- 10 files changed, 126 insertions(+), 68 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomAccelerateHandler.java 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/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/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 7d85deb08..aea4bbf4d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -237,6 +237,7 @@ public class UserMissionManager extends MongoBase { break; case MISSING_ROOM_MISSION_REWARD:{ missingRoomMissionType.rewardMission((int)parm[0],missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION)); + updateString("missingRoomMissionType",missingRoomMissionType); } break; default: 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 fcf1225ee..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 @@ -298,9 +298,9 @@ public class MissionLoigc { for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){ CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); int missingTime = missingRoomMissionType.getMissingTime(missionId); - info.setMissionId(missionId).setState(missingTime>0?1:2) + info.setMissionId(missionId).setState(missingTime>0?0:missingTime==0?1:2) .setType(GameMisionType.MISSINGROOMMISSION.getType()) - .setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo()); + .setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo(missionId)); missionList.add(info.build()); } } @@ -386,7 +386,8 @@ public class MissionLoigc { 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()){ @@ -691,6 +692,20 @@ public class MissionLoigc { 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 b1f3101c4..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 @@ -176,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); 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 index 08ada2734..bef24d9bb 100644 --- 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 @@ -12,10 +12,7 @@ import config.SCHero; import config.SMazeTreasure; import util.TimeUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author lvxinran @@ -24,7 +21,7 @@ import java.util.Map; */ public class MissingRoomMissionType extends AbstractMissionType{ private Map missingTime = new HashMap<>(); - private List herosInfo = new ArrayList<>(); + private Map> heroesInfo = new HashMap<>(); private int missionIndex; private int coinRefreshCount; @@ -39,11 +36,20 @@ public class MissingRoomMissionType extends AbstractMissionType{ @Override public int[][] reward(int missionId) { - return new int[0][]; + 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); } @@ -57,8 +63,12 @@ public class MissingRoomMissionType extends AbstractMissionType{ 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(herosInfo.contains(hero)){ + if(sentHeroes.contains(hero)){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } } @@ -96,16 +106,18 @@ public class MissingRoomMissionType extends AbstractMissionType{ getDoingMissionIds().remove(missionId); getFinishMissionIds().add(missionId); missingTime.put(missionId, (int)(TimeUtils.now()/1000)+sMazeTreasure.getWasteTime()); - herosInfo.addAll(heroes); - + 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() { - return herosInfo; + public List getHerosInfo(int missionId) { + return heroesInfo.get(missionId); } public int getMissionIndex() { 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();