From a35c93b6fbf271335899a9b30ae10ea73f21b352 Mon Sep 17 00:00:00 2001 From: jiahuiwen <1024696487@qq.com> Date: Mon, 15 Apr 2019 18:03:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/map/MapLogic.java | 149 +++++++++++++----- .../ljsd/jieling/handler/map/MapManager.java | 31 ++-- .../handler/map/behavior/BehaviorUtil.java | 9 +- .../map/behavior/DestroyMissionBehavior.java | 11 +- .../ljsd/jieling/handler/mission/Mission.java | 16 +- 5 files changed, 159 insertions(+), 57 deletions(-) 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 cc043499b..a676fe621 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 @@ -71,6 +71,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); @@ -104,28 +110,24 @@ 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); } - if (mapId > user.getPlayerInfoManager().getMapId()) { - LOGGER.info("enterMap() uid=>{} mapManager.getMaxMapId()=>{} mapId =>{} ", uid, user.getPlayerInfoManager().getMapId(), mapId); - MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), ""); - return; - } String error = initTeamInfo(teamId, uid, user, mapManager); if (!error.isEmpty()){ LOGGER.info("enterMap() uid=>{} error =>{} ", uid, error); @@ -161,6 +163,7 @@ public class MapLogic { if (mapManager.getTemporaryItems() != null) { mapEnterResponse.setTemporaryItems(CBean2Proto.getDrop(mapManager.getTemporaryItems())); } + LOGGER.info("enterMap() uid=>{} mapId =>{} ", uid, mapManager.getCurMapId()); MessageUtil.sendMessage(iSession, 1, messageType.getNumber(), mapEnterResponse.build(), true); } @@ -250,6 +253,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); @@ -294,6 +298,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(), "未开始探索"); @@ -349,6 +360,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()); @@ -507,7 +525,7 @@ public class MapLogic { } // LOGGER.info("updateEvent =====>success<====== xy=>{}, getPointId=>{} eventId={}, mission=>{}, nextEventId=>{}, eventBehaviorCommon=>{} {} sOptionConfig.getReward()=>{}", mapManager.getCurXY(), cell == null ? 0 : cell.getPointId(), // cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMissionList(), nextEventId, eventBehaviorCommon,eventUpdateResponse.getDrop(), sOptionConfig.getReward()); - LOGGER.info("updatEvent() uid=>{},nextEventId={},eventId={},mission=>{}", uid, nextEventId, cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMission()); +// LOGGER.info("updatEvent() uid=>{},nextEventId={},eventId={},mission=>{}", uid, nextEventId, cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMission()); MessageUtil.sendMessage(session, 1, messageType.getNumber(), eventUpdateResponse.build(), true); } @@ -648,6 +666,7 @@ public class MapLogic { .setItemId(mission.getMissionId()) .setMissionStep(mission.getMissionStep()) .setState("") + .setTime(mission.getTime()) .build(); return openMission; } @@ -686,6 +705,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); @@ -709,6 +730,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()); @@ -774,6 +802,14 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "此战斗已结算过!"); return; } + MapManager mapManager = user.getMapManager(); + if (mapManager.getCanMoveTime() > 0) { + long leftTime = mapManager.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(); @@ -806,12 +842,34 @@ public class MapLogic { } //校验结果码 1:胜利 int resultCode = checkResult[0]; - if (resultCode == -1){ - MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "战斗异常!"); + if (resultCode == -1) { + resetMapInfo(user, false); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "战斗异常!"); return; - }else if(resultCode == 0){ - // 失败处理 -// resetMapInfo(user,true); + } else if (resultCode == 0) { + // 失败需要等待n秒后复活所有英雄 + int dieCount = mapManager.getDieCount(); + dieCount++; + mapManager.setDieCount(dieCount); + SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()); + int[] reviveTime = sChallengeConfig.getReviveTime(); + long time = (long) (MathUtils.calABX(dieCount, reviveTime) * 1000); + mapManager.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() @@ -822,14 +880,12 @@ public class MapLogic { MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse, true); 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()); hero.setCurHp(checkResult[teamPosHeroInfo.getPosition()]); } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1); FightInfoProto.FightEndResponse.Builder fightEndResponse = FightInfoProto.FightEndResponse.newBuilder(); fightEndResponse.setDrop(drop); @@ -846,23 +902,23 @@ 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); -// LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} drop=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getDrop()); +// LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId); + updateMapMission(mapManager,EventType.fightEvent,0,monsterGroupId); +// LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} drop=>{} mission=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getDrop(), fightEndResponse.getMission()); MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true); } @@ -1061,17 +1117,28 @@ public class MapLogic { } int useTime = (int) ((TimeUtils.now() - startExporeTime) / 1000); if (useTime >= sChallengeConfig.getMapTime()) { - resetMapInfo(user, false); return 0; } else { return sChallengeConfig.getMapTime() - useTime; } } + 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(); @@ -1079,9 +1146,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; } @@ -1182,7 +1249,7 @@ public class MapLogic { return; } SLevelDifficultyConfig sLevelDifficultyConfig = SLevelDifficultyConfig.getsLevelDifficultyConfigMap().get(fightId); - if (levelDifficulty.getChallengeTimes() >= sLevelDifficultyConfig.getMaxCountPerDay()){ + if (levelDifficulty.getChallengeTimes() < sLevelDifficultyConfig.getMaxCountPerDay()){ LOGGER.info("startLevelDifficultyFight==>uid={},fightId={} challengeTimes={},MaxTime={}",uid,fightId,levelDifficulty.getChallengeTimes(),sLevelDifficultyConfig.getMaxCountPerDay()); MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "次数不足"); return; @@ -1192,6 +1259,12 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "道具不足"); return; } + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); + if (teamPosHeroInfos == null) { + LOGGER.info("startLevelDifficultyFight==>uid={},teamId wrong={}", uid, teamId); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "teamId is wrong:" + teamId); + return; + } //扣除预先道具 ItemUtil.fightItemCost(user,sLevelDifficultyConfig.getPreLevelCost()); FightInfoProto.FightStartResponse.Builder fightStartResponse = FightInfoProto.FightStartResponse.newBuilder(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 0976dbbd6..955d80938 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -44,10 +44,12 @@ public class MapManager extends MongoBase { private long startExporeTime; - private int userTime; + private long canMoveTime; private Mission mission; + private int dieCount; + public MapManager() { this.setRootCollection(User._COLLECTION_NAME); } @@ -249,15 +251,6 @@ public class MapManager extends MongoBase { this.startExporeTime = startExporeTime; } - public int getUserTime() { - return userTime; - } - - public void setUserTime(int userTime) { - updateString("userTime", userTime); - this.userTime = userTime; - } - public Mission getMission() { return mission; } @@ -266,4 +259,22 @@ public class MapManager extends MongoBase { updateString("mission", mission); this.mission = mission; } + + public void setDieCount(int dieCount) { + updateString("dieCount", dieCount); + this.dieCount = dieCount; + } + + public int getDieCount() { + return dieCount; + } + + public long getCanMoveTime() { + return canMoveTime; + } + + public void setCanMoveTime(long canMoveTime) { + updateString("canMoveTime", canMoveTime); + this.canMoveTime = canMoveTime; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index d24ee2973..16988cfb5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -167,8 +167,13 @@ public class BehaviorUtil { return false; } CheckMissionReturn checkMissionReturn = MapLogic.getInstance().checkMission(mission, user); - CommonProto.Mission missionProto = MapLogic.getInstance().getMission(checkMissionReturn.mission); - eventUpdateResponse.setMission(missionProto); + if (checkMissionReturn != null) { + CommonProto.Mission missionProto = MapLogic.getInstance().getMission(checkMissionReturn.mission); + eventUpdateResponse.setMission(missionProto); + if (checkMissionReturn.drop != null) { + eventUpdateResponse.setDrop(checkMissionReturn.drop); + } + } return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/DestroyMissionBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/DestroyMissionBehavior.java index 8e7ce3842..358bb3e05 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/DestroyMissionBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/DestroyMissionBehavior.java @@ -22,10 +22,15 @@ public class DestroyMissionBehavior extends BaseBehavior { if (mission == null) { return false; } - CheckMissionReturn checkMissionReturn = MapLogic.getInstance().checkMission(mission, user); BehaviorUtil.destoryCurPoint(user); - CommonProto.Mission missionProto = MapLogic.getInstance().getMission(checkMissionReturn.mission); - eventUpdateResponse.setMission(missionProto); + CheckMissionReturn checkMissionReturn = MapLogic.getInstance().checkMission(mission, user); + if (checkMissionReturn != null) { + CommonProto.Mission missionProto = MapLogic.getInstance().getMission(checkMissionReturn.mission); + eventUpdateResponse.setMission(missionProto); + if (checkMissionReturn.drop != null) { + eventUpdateResponse.setDrop(checkMissionReturn.drop); + } + } return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/Mission.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/Mission.java index 49299a6cd..dc5d1b7f4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/Mission.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/Mission.java @@ -1,8 +1,7 @@ package com.ljsd.jieling.handler.mission; -import com.ljsd.common.mogodb.MongoBase; -public class Mission extends MongoBase { +public class Mission { private int missionId; @@ -10,6 +9,8 @@ public class Mission extends MongoBase { private String missionInfo; + private int time; + public int getMissionId() { return missionId; } @@ -30,8 +31,15 @@ public class Mission extends MongoBase { return missionInfo; } - public void setMissionInfo(String missionInfo) throws Exception { - updateString("missionInfo", missionInfo); + public int getTime() { + return time; + } + + public void setTime(int time) { + this.time = time; + } + + public void setMissionInfo(String missionInfo) { this.missionInfo = missionInfo; }