From 007a004f01cd311a0a7d1b28d8dccdacab7838ba Mon Sep 17 00:00:00 2001 From: jiahuiwen <1024696487@qq.com> Date: Mon, 25 Feb 2019 13:44:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=9C=B0=E5=9B=BE=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E4=B8=BB=E7=BA=BF=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/map/CrossMapCell.java | 15 +++++++++ .../ljsd/jieling/handler/map/MapLogic.java | 31 ++++++++++++++++--- .../dao => handler/map}/MapManager.java | 11 +++++-- .../handler/map/behavior/BaseBehavior.java | 9 +++++- .../jieling/handler/map/jump/BaseJump.java | 9 +++++- .../ljsd/jieling/handler/mission/Mission.java | 5 +++ .../jieling/handler/mission/MissionLogic.java | 7 +++++ .../java/com/ljsd/jieling/logic/dao/User.java | 1 + .../ljsd/jieling/logic/dao/UserManager.java | 1 + 9 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java rename serverlogic/src/main/java/com/ljsd/jieling/{logic/dao => handler/map}/MapManager.java (87%) 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 new file mode 100644 index 000000000..e3cede043 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/CrossMapCell.java @@ -0,0 +1,15 @@ +package com.ljsd.jieling.handler.map; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class CrossMapCell { + + // missionId 存在某个地图的任务 + private Set missionIds = new HashSet<>(); + + public Set getMissionIds() { + return missionIds; + } +} 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 baa256a5f..d7b838038 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 @@ -66,7 +66,7 @@ public class MapLogic { mapManager.setHeroes(heroes); user.getPlayerInfoManager().setMapId(101); mapManager.setCurMapId(101); - initMap(mapManager); + initMap(mapManager, user); user.setMapManager(mapManager); } else { Map scMap = SCMap.sCMap.get(mapId); @@ -77,7 +77,7 @@ public class MapLogic { return; } if (mapId != mapManager.getCurMapId()) { - initMap(mapManager); + initMap(mapManager, user); user.setMapManager(mapManager); } } @@ -103,20 +103,35 @@ public class MapLogic { } - private void initMap(MapManager mapManager) throws Exception { + private void initMap(MapManager mapManager, User user) throws Exception { Map scMap = SCMap.sCMap.get(mapManager.getCurMapId()); Map newMap = new HashMap<>(); Map spicelMap = new HashMap<>(); Random random = new Random(); + CrossMapCell crossMapCell1 = mapManager.getCrossMapInfos().get(mapManager.getCurMapId()); + Map missionInfos = new HashMap<>(3); + 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()); + } + } + } for (Map.Entry entry : scMap.entrySet()) { SCMap scMap1 = entry.getValue(); int randomIndex = random.nextInt(scMap1.getGroups().length); 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("========scMap1.getEvent()======>{}", scMap1.getEvent()); + LOGGER.info("====initMap()====mapPointConfig == null======>{}", scMap1.getEvent()); continue; } Cell cellValue = new Cell(xy, mapPointConfig.getInitialEventId(), mapPointConfig.getId()); @@ -361,13 +376,19 @@ public class MapLogic { doingMissions.put(behaviorTypeValues[0][0], mission); user.getMissionManager().updateDoingMissions(doingMissions); openMission = getMission(newDunEvents, mission); + CrossMapCell crossMapInfo = mapManager.getCrossMapInfos().get(mapManager.getCurMapId()); + if (crossMapInfo == null) { + crossMapInfo = new CrossMapCell(); + } + crossMapInfo.getMissionIds().add(behaviorTypeValues[0][0]); + mapManager.updateCrossMapInfos(mapManager.getCurMapId(), crossMapInfo); break; } case EventType.jump: { isSuccess = true; if (behaviorTypeValues[0][0] != 0) { mapManager.setCurMapId(behaviorTypeValues[0][0]); - initMap(mapManager); + initMap(mapManager, user); } break; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java similarity index 87% rename from serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MapManager.java rename to serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 007026771..208ceb065 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -1,4 +1,4 @@ -package com.ljsd.jieling.logic.dao; +package com.ljsd.jieling.handler.map; @@ -28,16 +28,21 @@ public class MapManager extends MongoBase { private Set walkCells; - private Map> crossMapInfos = new ConcurrentHashMap<>(); + private Map crossMapInfos = new ConcurrentHashMap<>(); public Map getMapInfo() { return mapInfo; } - public Map> getCrossMapInfos() { + public Map getCrossMapInfos() { return crossMapInfos; } + public void updateCrossMapInfos(int key, CrossMapCell crossMapCell) throws Exception { + updateString( "mapInfo." + key, crossMapCell); + crossMapInfos.put(key, crossMapCell); + } + public int getCurMapId() { return curMapId; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BaseBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BaseBehavior.java index f21bcf135..b9f5cd846 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BaseBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BaseBehavior.java @@ -1,4 +1,11 @@ package com.ljsd.jieling.handler.map.behavior; -public interface BaseBehavior { +import com.ljsd.jieling.logic.dao.User; + +public abstract class BaseBehavior { + + public abstract int getBehaviorType(); + + public abstract void process(User user) throws Exception; + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/jump/BaseJump.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/jump/BaseJump.java index 13c8263d6..caa04e2ab 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/jump/BaseJump.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/jump/BaseJump.java @@ -1,4 +1,11 @@ package com.ljsd.jieling.handler.map.jump; -public class BaseJump { +import com.ljsd.jieling.logic.dao.User; + +public abstract class BaseJump { + + public abstract int getJumpType(); + + public abstract void process(User user) throws Exception; + } 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 eae6aab67..0bf645c7e 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 @@ -36,6 +36,11 @@ public class Mission extends MongoBase { return missionInfos; } + public void updateMissionInfos(int xy, Cell cell) throws Exception { + updateString("missionInfos." + xy, cell); + this.missionInfos.put(xy, cell); + } + public String getMissionInfo() { return missionInfo; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java index 92ce2d36f..2a7cbec1a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/MissionLogic.java @@ -94,6 +94,13 @@ public class MissionLogic { String[] split1 = mission.getMissionInfo().split("#"); int needCount = Integer.parseInt(split1[2]); mission.setMissionStep(mission.getMissionStep() + 1); + Map missionInfos = mission.getMissionInfos(); + int curXY = user.getMapManager().getCurXY(); + if (missionInfos.containsKey(curXY)) { + Cell cell = missionInfos.get(curXY); + cell.setEventId(-1); + mission.updateMissionInfos(curXY, cell); + } String newEventId = null; if (mission.getMissionStep() >= needCount) { if (mission.getMissionInfo() != null) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/User.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/User.java index 8c43ed34e..a22c740c7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/User.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/User.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.common.mogodb.MongoRoot; +import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.mission.MissionManager; public class User extends MongoRoot { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 78094173e..aa4d6ac7c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.TimeUtils; import org.springframework.context.ConfigurableApplicationContext;