diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java index 979327d6b..51f917d24 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/EventType.java @@ -105,5 +105,6 @@ public class EventType { public static final int fightEvent = 2; public static final int shopEvent = 3; public static final int updateOptionalEvent = 4; + public static final int passMap = 4; } 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 77ec65dd4..ec28ec3ad 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 @@ -1299,6 +1299,7 @@ public class MapLogic { } } mapManager.updateCrossInfoMap(mapManager.getCurMapId(), crossInfo); + MapMissionManager.processPassMapEvent(user,useTime); } mapManager.setMission(mission); checkMissionReturn.mission = mission; 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 f1b7f3c5e..e26a15f92 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 @@ -460,4 +460,9 @@ public class MapManager extends MongoBase { updateString("starReward" , starReward); this.starReward = starReward; } + + public void setCopyMissionProgres(MapMission copyMissionProgres) { + updateString("copyMissionProgres" , copyMissionProgres); + this.copyMissionProgres = copyMissionProgres; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapMissionManager.java index b08c5db70..67c9b1ae5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapMissionManager.java @@ -2,7 +2,13 @@ package com.ljsd.jieling.handler.map; import com.ljsd.jieling.config.MapPointConfig; import com.ljsd.jieling.config.SAccomplishmentConfig; +import com.ljsd.jieling.config.SCHero; import com.ljsd.jieling.config.SChallengeConfig; +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.TeamPosForPokenInfo; +import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.mission.GameMisionType; import com.ljsd.jieling.logic.mission.MissionState; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; @@ -125,12 +131,96 @@ public class MapMissionManager { } } if(needUpdate){ - mapMission.setAllMissionProgress(allMissionProgress); - mapManager.setMapMissionProgres(mapMission); + if(copyMissionUpdate){ + mapManager.setCopyMissionProgres(mapMission); + }else{ + mapManager.setMapMissionProgres(mapMission); + } } return mapMission.getTotalWeight(); } + public static void processPassMapEvent(User user,int passTime){ + MapManager mapManager = user.getMapManager(); + MapMission copyMissionProgres = mapManager.getCopyMissionProgres(); + SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()); + int mapId = sChallengeConfig.getId(); + int difficultType = sChallengeConfig.getDifficultType(); + HeroLogic.getInstance().calTeamTotalForce(user,mapManager.getTeamId(),false); + Map allMissionProgress = copyMissionProgres.getAllMissionProgress(); + List mapMissionTypes = typeByEventTypeMap.get(EventType.passMap); + boolean needUpdate = false; + for(MapMissionType mapMissionType : mapMissionTypes){ + List sAccomplishmentConfigs = SAccomplishmentConfig.getsAccomplishmentConfigByMapIdAndLogic(mapId, mapMissionType.getMissionTypeValue()); + if(sAccomplishmentConfigs == null){ + continue; + } + Set professions = new HashSet<>(5); + int parm = 0; + switch (mapMissionType){ + case PASS_INTIME_MAP: + parm = passTime; + break; + case PASS_DEATH_MAP_EVENT: + parm = mapManager.getDieCount(); + break; + case PASS_TEAM_FORCE_EVENT: + parm = HeroLogic.getInstance().calTeamTotalForce(user,mapManager.getTeamId(),false); + break; + case PASS_TEAM_NOT_PROFESSION_EVENT: + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(mapManager.getTeamId()); + Map heroMap = user.getHeroManager().getHeroMap(); + for(TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList){ + String heroId = teamPosHeroInfo.getHeroId(); + Hero hero = heroMap.get(heroId); + professions.add(SCHero.getsCHero().get(hero.getTemplateId()).getProfession()); + } + } + for(SAccomplishmentConfig sAccomplishmentConfig : sAccomplishmentConfigs){ + int missionId = sAccomplishmentConfig.getId(); + Integer missionValue = allMissionProgress.get(missionId); + if(missionValue == null){ + continue; + } + int[][] values = sAccomplishmentConfig.getValues(); + int targetEventValue = values[1][0]; + for(int targetEventIdTmp : values[0]){ + if(targetEventIdTmp == difficultType){ + if(mapMissionType == MapMissionType.PASS_TEAM_NOT_PROFESSION_EVENT){ + if(!professions.contains(targetEventValue)){ + allMissionProgress.put(missionId,-1); + MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(missionId,MissionState.FINISH,missionValue+1); + readySendCopyMission(missionStateChangeInfo); + needUpdate =true; + } + }else if(mapMissionType == MapMissionType.PASS_INTIME_MAP || mapMissionType == MapMissionType.PASS_TEAM_FORCE_EVENT || mapMissionType == MapMissionType.PASS_DEATH_MAP_EVENT ){ + if(parm sAccomplishmentConfigs = SAccomplishmentConfig.getsAccomplishmentConfigByMapId(copyId); for(SAccomplishmentConfig sAccomplishmentConfig : sAccomplishmentConfigs){ @@ -81,6 +82,8 @@ public class MissionLoigc { Integer mineProgess = allMissionProgress.get(missionId); if(mineProgess==null){ mineProgess=0; + allMissionProgress.put(missionId,0); + needUpdate =true; } int state =0; if(mineProgess>=finishProgress){ @@ -91,9 +94,16 @@ public class MissionLoigc { state=2; mineProgess=finishProgress; } + if(mineProgess == -1){ + state=1; + mineProgess=1; + } missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(missionType).setProgress(mineProgess).build()); } } + if(needUpdate){ + user.getMapManager().setCopyMissionProgres(user.getMapManager().getCopyMissionProgres()); + } } public static void getVipMission(User user,List missionList){