地图探索任务

back_recharge
wangyuan 2019-06-25 10:12:25 +08:00
parent cdda69bad3
commit b99522734d
7 changed files with 118 additions and 4 deletions

View File

@ -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;
}

View File

@ -1299,6 +1299,7 @@ public class MapLogic {
}
}
mapManager.updateCrossInfoMap(mapManager.getCurMapId(), crossInfo);
MapMissionManager.processPassMapEvent(user,useTime);
}
mapManager.setMission(mission);
checkMissionReturn.mission = mission;

View File

@ -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;
}
}

View File

@ -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<Integer, Integer> allMissionProgress = copyMissionProgres.getAllMissionProgress();
List<MapMissionType> mapMissionTypes = typeByEventTypeMap.get(EventType.passMap);
boolean needUpdate = false;
for(MapMissionType mapMissionType : mapMissionTypes){
List<SAccomplishmentConfig> sAccomplishmentConfigs = SAccomplishmentConfig.getsAccomplishmentConfigByMapIdAndLogic(mapId, mapMissionType.getMissionTypeValue());
if(sAccomplishmentConfigs == null){
continue;
}
Set<Integer> 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<TeamPosHeroInfo> teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(mapManager.getTeamId());
Map<String, Hero> 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<targetEventValue){
allMissionProgress.put(missionId,-1);
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(missionId,MissionState.FINISH,missionValue+1);
readySendCopyMission(missionStateChangeInfo);
needUpdate =true;
}
}else{
if(missionValue<targetEventValue){
allMissionProgress.put(missionId,missionValue);
MissionState misisionState = MissionState.DOING;
if(missionValue+1 == targetEventValue){
misisionState= MissionState.FINISH;
}
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(missionId,misisionState,missionValue+1);
readySendCopyMission(missionStateChangeInfo);
needUpdate =true;
}
}
}
}
}
}
if(needUpdate){
user.getMapManager().setCopyMissionProgres(user.getMapManager().getCopyMissionProgres());
}
}
public static void readySendCopyMission(MissionStateChangeInfo missionStateChangeInfo){
MissionEventDistributor.getMissionStateChangeInfo(GameMisionType.COPYMISSION).add(missionStateChangeInfo);

View File

@ -9,7 +9,14 @@ public enum MapMissionType {
// COLLECT_GOODS_ID_EVENT(6), //在收集商人那边兑换出来物品
CONSUME_ACTION_POWER_EVENT(6), //在本次地图内消耗多少行动力
OPEN_BOX(7), //在本次地图内消耗多少行动力
BUY_GOODS_TYPE_EVENT(8); //在本图行脚商人购买某类物品
BUY_GOODS_TYPE_EVENT(8), //在本图行脚商人购买某类物品
PASS_FINISH_DIFFICULT_MAP(9), //通关xx难度
PASS_INTIME_MAP(10), //在xx分钟xx秒内通关(不论难度) 难度|次数
PASS_DEATH_MAP_EVENT(11), //通关时总死亡次数小于x次
PASS_TEAM_FORCE_EVENT(12), //通关队伍总战力小于xxxxx
PASS_TEAM_NOT_PROFESSION_EVENT(13), //通关队伍中不包含xx职业的妖灵师
;
private int missionType;

View File

@ -185,7 +185,7 @@ public class MailLogic {
int[][] itemArr = StringUtil.parseFiledInt2(mailItem.toString());
boolean isLimit = ItemUtil.checkCardAndEquipLimit(user,itemArr);
if (isLimit){
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
MessageUtil.sendErrorResponse(iSession,0,msgId,"背包已满");
return;
}
CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr, BIReason.TAKE_MAIL_REWARD);

View File

@ -73,6 +73,7 @@ public class MissionLoigc {
allMissionProgress = copyMissionProgres.getAllMissionProgress();
}
int missionType = GameMisionType.COPYMISSION.getType();
boolean needUpdate = false;
for(Integer copyId: SChallengeConfig.copyIds){
List<SAccomplishmentConfig> 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<CommonProto.UserMissionInfo> missionList){