找回代码

back_recharge
jiahuiwen 2019-04-17 14:29:24 +08:00
parent 60026e5384
commit 42451d1c36
2 changed files with 143 additions and 29 deletions

View File

@ -0,0 +1,37 @@
package com.ljsd.jieling.handler.map;
import java.util.Set;
public class CrossInfo {
private Set<Integer> stars;
private int leastTime;
private long sendRewardTime;
public Set<Integer> getStars() {
return stars;
}
public void setStars(Set<Integer> 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;
}
}

View File

@ -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<Integer, Integer> allMissionProgress = mapMissionProgres.getAllMissionProgress();
List<CommonProto.ExploreDetail> exploreDetailList = new ArrayList<>(allMissionProgress.size());
for(Map.Entry<Integer,Integer> item : allMissionProgress.entrySet()){
exploreDetailList.add(CommonProto.ExploreDetail.newBuilder().setId(item.getKey()).setProgress(item.getValue()).build());
if (mapMissionProgres != null) {
Map<Integer, Integer> allMissionProgress = mapMissionProgres.getAllMissionProgress();
List<CommonProto.ExploreDetail> exploreDetailList = new ArrayList<>(allMissionProgress.size());
for(Map.Entry<Integer,Integer> 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<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()
@ -826,7 +892,7 @@ public class MapLogic {
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());
@ -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()