diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java index e3cede043..3f5d40167 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java @@ -1,7 +1,6 @@ package com.ljsd.jieling.handler.map; import java.util.HashSet; -import java.util.Map; import java.util.Set; public class CrossMapCell { 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 d7b838038..bdeec145b 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 @@ -109,13 +109,13 @@ public class MapLogic { Map spicelMap = new HashMap<>(); Random random = new Random(); CrossMapCell crossMapCell1 = mapManager.getCrossMapInfos().get(mapManager.getCurMapId()); - Map missionInfos = new HashMap<>(3); + Set missions = new HashSet<>(); if (crossMapCell1 != null) { Map doingMissions = user.getMissionManager().getDoingMissions(); for (Integer doingMissionId : crossMapCell1.getMissionIds()) { if (doingMissions.containsKey(doingMissionId)) { Mission mission = doingMissions.get(doingMissionId); - missionInfos.putAll(mission.getMissionInfos()); + missions.add(mission); } } } @@ -125,15 +125,21 @@ public class MapLogic { int x = scMap1.getGroups()[randomIndex][0]; int y = scMap1.getGroups()[randomIndex][1]; int xy = CellUtil.xy2Pos(x, y); - if (missionInfos.containsKey(xy)) { - newMap.put(xy, missionInfos.get(xy)); - continue; - } MapPointConfig mapPointConfig = MapPointConfig.scMapEventMap.get(scMap1.getEvent()); if (mapPointConfig == null) { LOGGER.info("====initMap()====mapPointConfig == null======>{}", scMap1.getEvent()); continue; } + for (Mission mission : missions) { + if (mission.getMapPoints().containsKey(mapPointConfig.getId())) { + for (Map.Entry missionEntry : mission.getMissionInfos().entrySet()) { + newMap.put(missionEntry.getKey(), missionEntry.getValue()); + } + Cell cellValue = new Cell(xy, mission.getMapPoints().get(mapPointConfig.getId()), mapPointConfig.getId()); + newMap.put(xy, cellValue); + break; + } + } Cell cellValue = new Cell(xy, mapPointConfig.getInitialEventId(), mapPointConfig.getId()); if (mapPointConfig.getStyle() == EventType.enter) { mapManager.setCurXY(xy); @@ -410,7 +416,7 @@ public class MapLogic { } } mapManager.setMapInfo(mapInfo); - openMission = getMission(null, mission); + openMission = getMission(mission.getMissionInfos(), mission); break; } case EventType.monitorMission: { @@ -421,7 +427,7 @@ public class MapLogic { break; } MissionLogic.getInstance().checkMission(mission, user); - openMission = getMission(null, mission); + openMission = getMission(mission.getMissionInfos(), mission); break; } case EventType.openMission: { @@ -432,7 +438,7 @@ public class MapLogic { break; } MissionLogic.getInstance().checkMission(mission, user); - openMission = getMission(null, mission); + openMission = getMission(mission.getMissionInfos(), mission); // TODO 还要开新事件 @@ -446,7 +452,7 @@ public class MapLogic { break; } MissionLogic.getInstance().checkMission(mission, user); - openMission = getMission(null, mission); + openMission = getMission(mission.getMissionInfos(), mission); break; } case EventType.useItemMission: { @@ -461,7 +467,7 @@ public class MapLogic { break; } MissionLogic.getInstance().checkMission(mission, user); - openMission = getMission(null, mission); + openMission = getMission(mission.getMissionInfos(), mission); break; } default: { @@ -554,6 +560,12 @@ public class MapLogic { cell.setEventId(nextPoint); mapManager.addOrUpdateCell(mapManager.getCurXY(), cell); } + if (behaviorType == EventType.dun && openMission != null) { + Mission mission = user.getMissionManager().getDoingMissions().get(openMission.getItemId()); + if (mission != null) { + mission.updateMapPoints(cell.getPointId(), cell.getEventId()); + } + } int[] reward = {sOptionConfig.getReward()}; CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, reward, 1); List eventBehaviorValuesList = new ArrayList<>(); 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 0bf645c7e..68a68abbc 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 @@ -14,6 +14,10 @@ public class Mission extends MongoBase { private String missionInfo; + // pointId, eventId + private Map mapPoints = new ConcurrentHashMap<>(); + + // 地图坐标,事件点 private Map missionInfos = new ConcurrentHashMap<>(); public int getMissionId() { @@ -49,4 +53,13 @@ public class Mission extends MongoBase { updateString("missionInfo", missionInfo); this.missionInfo = missionInfo; } + + public Map getMapPoints() { + return mapPoints; + } + + public void updateMapPoints(int pointId, int eventId) throws Exception { + updateString("mapPoints." + pointId, eventId); + this.mapPoints.put(pointId, eventId); + } }