diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossInfo.java new file mode 100644 index 000000000..47b7fb079 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossInfo.java @@ -0,0 +1,37 @@ +package com.ljsd.jieling.handler.map; + +import java.util.Set; + +public class CrossInfo { + + private Set stars; + + private int leastTime; + + private long sendRewardTime; + + + public Set getStars() { + return stars; + } + + public void setStars(Set stars) { + this.stars = stars; + } + + public int getLeastTime() { + return leastTime; + } + + public void setLeastTime(int leastTime) { + this.leastTime = leastTime; + } + + public long getSendRewardTime() { + return sendRewardTime; + } + + public void setSendRewardTime(long sendRewardTime) { + this.sendRewardTime = sendRewardTime; + } +} 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 d93059183..1d2881b37 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 @@ -72,6 +72,12 @@ public class MapLogic { MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), ""); return; } + if (mapManager.getCurMapId() > 0) { + int leftTime = getLeftTime(user); + if (leftTime == 0) { + resetMapInfo(user, true); + } + } // 初始序章地图 if (user.getPlayerInfoManager().getMapId() == 0) { String error = initTeamInfo(teamId, uid, user, mapManager); @@ -105,19 +111,20 @@ public class MapLogic { MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "该地图不存在"); return; } -// if (scMapConfig == null || scMapConfig.getOpenRule() == null || scMapConfig.getOpenRule().length == 0) { -// LOGGER.info("enterMap() uid=>{} mapId=>{}, scMapConfig.getOpenRule()=>{}", uid, mapId, scMapConfig == null ? "" : scMapConfig.getOpenRule()); -// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), ""); -// return; -// } -// int missionId = scMapConfig.getOpenRule()[0]; -// if (!user.getMissionManager().getTakeRewardMissions().contains(missionId)) { -// Mission mission = user.getMissionManager().getDoingMissions().get(missionId); -// if (mission == null || mission.getMissionStep() < scMapConfig.getOpenRule()[1]) { -// LOGGER.info("enterMap() uid=>{} map not open == missionId =>{} step=>{}", uid, missionId, mission == null ? 0 : mission.getMissionStep()); -// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要完成任务:" + (scMapConfig == null ? "" : scMapConfig.getOpenRule()[0] + "#" + scMapConfig.getOpenRule()[1])); + // TODO 可进入地图条件判断 +// int[][] openRule = sChallengeConfig.getOpenRule(); +// if (openRule != null && openRule.length > 0) { +// if (user.getPlayerInfoManager().getLevel() < openRule[0][1]) { +// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要等级:" + openRule[0][1]); // return; // } +// LevelDifficulty levelDifficulty = user.getLevelDifficultyManager().getLevelDifficultyInfosMap().get(openRule[0][0]); +// if (levelDifficulty == null && levelDifficulty.getState() != 4) { +// if (user.getPlayerInfoManager().getLevel() < openRule[0][1]) { +// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要通关:" + openRule[0][0]); +// return; +// } +// } // } if (user.getPlayerInfoManager().getMapId() < mapId) { user.getPlayerInfoManager().setMapId(mapId); @@ -168,12 +175,16 @@ public class MapLogic { mapEnterResponse.setTemporaryItems(CBean2Proto.getDrop(mapManager.getTemporaryItems())); } MapMission mapMissionProgres = mapManager.getMapMissionProgres(); - Map allMissionProgress = mapMissionProgres.getAllMissionProgress(); - List exploreDetailList = new ArrayList<>(allMissionProgress.size()); - for(Map.Entry item : allMissionProgress.entrySet()){ - exploreDetailList.add(CommonProto.ExploreDetail.newBuilder().setId(item.getKey()).setProgress(item.getValue()).build()); + if (mapMissionProgres != null) { + Map allMissionProgress = mapMissionProgres.getAllMissionProgress(); + List exploreDetailList = new ArrayList<>(allMissionProgress.size()); + for(Map.Entry item : allMissionProgress.entrySet()){ + exploreDetailList.add(CommonProto.ExploreDetail.newBuilder().setId(item.getKey()).setProgress(item.getValue()).build()); + } + mapEnterResponse.addAllExploreDetail(exploreDetailList); + } else { + LOGGER.info("enterMap MapMission == null mapId=>{}", mapManager.getCurMapId()); } - mapEnterResponse.addAllExploreDetail(exploreDetailList); MessageUtil.sendMessage(iSession, 1, messageType.getNumber(), mapEnterResponse.build(), true); } @@ -263,6 +274,7 @@ public class MapLogic { Mission mission = new Mission(); mission.setMissionId(challengeMapConfig.getMissionId()); mission.setMissionStep(0); + mission.setTime(0); mapManager.setMission(mission); mapManager.setMapInfo(newMap); mapManager.setTypeEight(spicelMap); @@ -307,6 +319,13 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } + if (mapManager.getCanMoveTime() > 0) { + long leftTime = mapManager.getCanMoveTime() - TimeUtils.now(); + if (leftTime > 0) { + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活"); + return; + } + } if (mapManager.getStartExporeTime() == 0) { LOGGER.info("mapManager.getStartExporeTime() == 0"); MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索"); @@ -338,6 +357,7 @@ public class MapLogic { .setEventId(cell.getEventId()) .setLeftTime(getLeftTime(user)) .build(); + LOGGER.info("enterMap() uid=>{} mapId =>{} ", uid, mapManager.getCurMapId()); MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapUpdateResponse, true); } @@ -362,6 +382,13 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索"); return; } + if (mapManager.getCanMoveTime() > 0) { + long leftTime = mapManager.getCanMoveTime() - TimeUtils.now(); + if (leftTime > 0) { + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活"); + return; + } + } Cell cell = mapManager.getMapInfo().get(mapManager.getTriggerXY()); if (cell == null) { LOGGER.info("cell == null xy is wrong =>{} triggerXY=>{}", mapManager.getCurXY(), mapManager.getTriggerXY()); @@ -661,6 +688,7 @@ public class MapLogic { .setItemId(mission.getMissionId()) .setMissionStep(mission.getMissionStep()) .setState("") + .setTime(mission.getTime()) .build(); return openMission; } @@ -694,6 +722,8 @@ public class MapLogic { mapManager.setCurMapId(0); mapManager.setStartExporeTime(0); mapManager.setTriggerXY(0); + mapManager.setDieCount(0); + mapManager.setCanMoveTime(0); mapManager.setFoodBufferMap(new HashMap<>()); TemporaryItems temporaryItems = mapManager.getTemporaryItems(); mapManager.setMission(null); @@ -717,6 +747,13 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } + if (mapManager.getCanMoveTime() > 0) { + long leftTime = mapManager.getCanMoveTime() - TimeUtils.now(); + if (leftTime > 0) { + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活"); + return; + } + } Cell cell = mapManager.getMapInfo().get(mapManager.getTriggerXY()); if (cell == null) { cell = mapManager.getMapInfo().get(mapManager.getCurXY()); @@ -782,6 +819,14 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "此战斗已结算过!"); return; } + MapManager mapManager = user.getMapManager(); + if (user.getMapManager().getCanMoveTime() > 0) { + long leftTime = user.getMapManager().getCanMoveTime() - TimeUtils.now(); + if (leftTime > 0) { + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活"); + return; + } + } int seed = Integer.parseInt((String)valueMap.get(RedisKey.FIGHT_SEED)); int monsterGroupId = Integer.parseInt((String)valueMap.get(RedisKey.FIGHT_GROUPID)); CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder(); @@ -813,8 +858,29 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "战斗异常!"); return; }else if(resultCode == 0){ - // 失败处理 -// resetMapInfo(user,true); + // 失败需要等待n秒后复活所有英雄 + int dieCount = user.getMapManager().getDieCount(); + dieCount++; + user.getMapManager().setDieCount(dieCount); + SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(user.getMapManager().getCurMapId()); + int[] reviveTime = sChallengeConfig.getReviveTime(); + long time = (long) (MathUtils.calABX(dieCount, reviveTime) * 1000); + user.getMapManager().setCanMoveTime(TimeUtils.now() + time); + int leftTime = getLeftTime(user); + if (leftTime <= (int) (time / 1000)) { + resetMapInfo(user, false); + } else { + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(mapManager.getTeamId()); + for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { + Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); + if (hero == null) { + continue; + } + Map heroAttributeMap = HeroLogic.getInstance().calHeroFinalAttribute(user, hero); + hero.setCurHp(heroAttributeMap.get(HeroAttributeEnum.Hp.getPropertyId())); + hero.setSpeed(heroAttributeMap.get(HeroAttributeEnum.Speed.getPropertyId())); + } + } CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse .newBuilder() @@ -826,7 +892,7 @@ public class MapLogic { return; } - int teamId = user.getMapManager().getTeamId(); + int teamId = mapManager.getTeamId(); List team = user.getTeamPosManager().getTeamPosForHero().get(teamId); for (TeamPosHeroInfo teamPosHeroInfo : team){ Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); @@ -848,22 +914,22 @@ public class MapLogic { fightEndResponse.setMission(eventUpdateResponse.getMission()); } if (destoryId != 0) { - BehaviorUtil.destoryPoint(user, user.getMapManager().getCurMapId(), destoryId); + BehaviorUtil.destoryPoint(user, mapManager.getCurMapId(), destoryId); } if (destoryXY != 0) { BehaviorUtil.destoryApointXY(user, destoryXY); } if (nextEventId != 0) { - int triggerXY = user.getMapManager().getTriggerXY(); - Cell cell = user.getMapManager().getMapInfo().get(triggerXY); + int triggerXY = mapManager.getTriggerXY(); + Cell cell = mapManager.getMapInfo().get(triggerXY); if (cell != null) { cell.setEventId(nextEventId); - user.getMapManager().addOrUpdateCell(triggerXY, cell); - updateMapMission(user.getMapManager(),EventType.updateEvent,cell.getEventId(),0); + mapManager.addOrUpdateCell(triggerXY, cell); + updateMapMission(mapManager,EventType.updateEvent,cell.getEventId(),0); } } LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId); - updateMapMission(user.getMapManager(),EventType.fightEvent,0,monsterGroupId); + updateMapMission(mapManager,EventType.fightEvent,0,monsterGroupId); // LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} drop=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getDrop()); MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true); } @@ -1024,10 +1090,22 @@ public class MapLogic { } } + public int getUseTime(User user) throws Exception { + long startExporeTime = user.getMapManager().getStartExporeTime(); + if (startExporeTime == 0) { + return -1; + } + int useTime = (int) ((TimeUtils.now() - startExporeTime) / 1000); + return useTime; + } + public CheckMissionReturn checkMission(Mission mission, User user) throws Exception { + if (mission.getTime() > 0) { + return null; + } + CheckMissionReturn checkMissionReturn = new CheckMissionReturn(); SMissionEventsConfig sMissionEventsConfig = SMissionEventsConfig.sMissionEventsConfigMap.get(mission.getMissionId()); mission.setMissionStep(mission.getMissionStep() + 1); - CheckMissionReturn checkMissionReturn = new CheckMissionReturn(); if (mission.getMissionStep() >= sMissionEventsConfig.getMissionNum()) { if (mission.getMissionInfo() != null) { checkMissionReturn.newEventId = mission.getMissionInfo(); @@ -1035,9 +1113,9 @@ public class MapLogic { int[] reward = {sMissionEventsConfig.getReward()}; CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, 1, 0); checkMissionReturn.drop = drop; - } else { - user.getMapManager().setMission(mission); + mission.setTime(getUseTime(user)); } + user.getMapManager().setMission(mission); checkMissionReturn.mission = mission; return checkMissionReturn; } @@ -1245,7 +1323,6 @@ public class MapLogic { LevelDifficulty levelDifficulty = levelDifficultyManager.getLevelDifficultyInfosMap().get(fightId); levelDifficulty.setState(Global.FIGHT_OPEND_NO_CLEARANCE); // 失败处理 - resetMapInfo(user,true); CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse .newBuilder()