|
|
|
@ -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<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(mapManager.getTeamId());
|
|
|
|
|
for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) {
|
|
|
|
|
Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId());
|
|
|
|
|
if (hero == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
Map<Integer, Integer> 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<TeamPosHeroInfo> 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<TeamPosHeroInfo> 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();
|
|
|
|
|