From 8e727965dd3fe62466ab745e2873341f98ff536e Mon Sep 17 00:00:00 2001 From: lvxinran Date: Mon, 15 Jul 2019 16:34:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E8=8B=B1=E6=9C=AC=E6=89=AB=E8=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/config/SChallengeConfig.java | 13 ++ .../ljsd/jieling/handler/map/MapLogic.java | 106 +++++++++------- .../handler/map/MapMissionManager.java | 115 +++++++++++++++++- .../handler/map/behavior/DunBehavior.java | 2 +- .../GetAllLeveDifficultyInfostHandler.java | 2 +- .../ljsd/jieling/logic/fight/CheckFight.java | 10 +- .../jieling/logic/mission/MissionLoigc.java | 3 +- .../ljsd/jieling/logic/store/StoreType.java | 23 ++++ 8 files changed, 224 insertions(+), 50 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreType.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeConfig.java index 4b8ee6170..58fce4d21 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeConfig.java @@ -50,6 +50,11 @@ public class SChallengeConfig implements BaseConfig { private int difficultType; + private int[] sweepingOpenRule; + + private int[][] sweepingStoreProbability; + + public int getId() { return id; } @@ -93,4 +98,12 @@ public class SChallengeConfig implements BaseConfig { public int getDifficultType() { return difficultType; } + + public int[] getSweepingOpenRule() { + return sweepingOpenRule; + } + + public int[][] getSweepingStoreProbability() { + return sweepingStoreProbability; + } } 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 ddd361c9e..13eaa6bea 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 @@ -577,8 +577,8 @@ public class MapLogic { } } } - MapMissionManager.updateMapMission(mapManager, EventType.updateOptionalEvent, optionId, optionId); - MapMissionManager.updateMapMission(mapManager, EventType.updatePonintEvent, pointId, pointId); + MapMissionManager.updateMapMission(user, EventType.updateOptionalEvent, optionId, optionId); + MapMissionManager.updateMapMission(user, EventType.updatePonintEvent, pointId, pointId); CommonProto.Drop.Builder dropBuilder = null; if (sOptionConfig.getReward().length > 0) { dropBuilder = ItemUtil.drop(user, sOptionConfig.getReward(), 1, 1, BIReason.MAP_EVENET_REWARD); @@ -816,11 +816,13 @@ public class MapLogic { LOGGER.info("退出地图"); if(challengeConfig.getType()==2){ if(mapManager.getTower()>=1){ - mapManager.setHighestTower(mapManager.getTower()); - if(TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))>RedisUtil.getInstence().getZSetScore(RedisKey.TOWER_RANK, "", String.valueOf(user.getId()))){ - RedisUtil.getInstence().zsetAddOne(RedisKey.getKey(RedisKey.TOWER_RANK,"",false),String.valueOf(user.getId()),TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))); - } mapManager.setMapIntoFlag(1); + if(mapManager.getTower()==STrialConfig.getHighestTower()){ + mapManager.setHighestTower(mapManager.getTower()); + if(TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))>RedisUtil.getInstence().getZSetScore(RedisKey.TOWER_RANK, "", String.valueOf(user.getId()))){ + RedisUtil.getInstence().zsetAddOne(RedisKey.getKey(RedisKey.TOWER_RANK,"",false),String.valueOf(user.getId()),TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))); + } + } } } mapManager.setEssenceValue(0); @@ -960,7 +962,7 @@ public class MapLogic { } int[] checkResult = CheckFight.getInstance().checkFight(seed, mostTime, getFightData, getOptionData); List remainHp = new ArrayList<>(5); - for (int i = 1; i < checkResult.length; i++) { + for (int i = 2; i < checkResult.length; i++) { if (checkResult[i] <= 0) { remainHp.add(0); } else { @@ -1012,7 +1014,7 @@ public class MapLogic { for (TeamPosHeroInfo teamPosHeroInfo : team) { // Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); // hero.setCurHp(checkResult[teamPosHeroInfo.getPosition()]); - mapManager.updateHeroOneAttribute(teamPosHeroInfo.getHeroId(), HeroAttributeEnum.CurHP.getPropertyId(), checkResult[teamPosHeroInfo.getPosition()]); + mapManager.updateHeroOneAttribute(teamPosHeroInfo.getHeroId(), HeroAttributeEnum.CurHP.getPropertyId(), checkResult[teamPosHeroInfo.getPosition()+1]); } BehaviorUtil.destoryApointXY(user, destoryXY); @@ -1045,7 +1047,7 @@ public class MapLogic { fastFightResponse.setEssenceValue(mapManager.getEssenceValue()); // LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId); - MapMissionManager.updateMapMission(mapManager, EventType.fightEvent, groupId, groupId); + MapMissionManager.updateMapMission(user, EventType.fightEvent, groupId, groupId); // LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} misson=>{} eventDrop=>{}, missionDrop=>{}", uid, sMonsterGroup.getRewardgroup(), fastFightResponse.getMission(), fastFightResponse.getEnventDrop(), fastFightResponse.getMissionDrop()); MessageUtil.sendMessage(session, 1, messageType.getNumber(), fastFightResponse.build(), true); } @@ -1259,7 +1261,7 @@ public class MapLogic { fightEndResponse.setEventId(nextEventId); // LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId); - MapMissionManager.updateMapMission(mapManager, EventType.fightEvent, monsterGroupId, monsterGroupId); + MapMissionManager.updateMapMission(user, EventType.fightEvent, monsterGroupId, monsterGroupId); // LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} misson=>{} eventDrop=>{}, missionDrop=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getMission(), fightEndResponse.getEnventDrop(), fightEndResponse.getMissionDrop()); if (monsterGroupId == mapManager.getSuddenlyBoss()) { mapManager.findSuddenlyBoss(0, 0); @@ -1492,42 +1494,64 @@ public class MapLogic { MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "not allowed"); return; } - MapManager mapManager = user.getMapManager(); - CrossInfo crossInfo = mapManager.getCrossInfoMap().get(mapId); - if (crossInfo == null) { - LOGGER.info("sweep 未三星通关"); - MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); - return; - } - if (crossInfo.getStars().size() != 3) { - LOGGER.info("sweep 未三星通关"); - MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); - return; - } + SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(mapId); - int type = sChallengeConfig.getType(); - if(type==3 || type==1){ - int itemId = Global.GENERALSTORY_TICKET; - if (type == 3) { - itemId = Global.HEROSTORY_TICKET; - } - boolean enough = ItemUtil.itemCost(user, new int[][]{{itemId ,count}}, BIReason.MAP_ENTER_CONSUME, mapId); - if (!enough) { - MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "no ticket"); + MapManager mapManager = user.getMapManager(); + if(sChallengeConfig.getSweepingOpenRule().length<1){ + MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"该副本不可扫荡"); + return; + } + + if(sChallengeConfig.getSweepingOpenRule()[0]==1){ + CrossInfo crossInfo = mapManager.getCrossInfoMap().get(mapId); + if (null == crossInfo||crossInfo.getStars().size() < sChallengeConfig.getSweepingOpenRule()[1]) { + LOGGER.info("sweep 未三星通关"); + MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); return; } - SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(mapId); - MapInfoProto.MapSweepResponse.Builder mapSweepResponse = MapInfoProto.MapSweepResponse.newBuilder(); - for (int i = 0; i < count; i++) { - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0, BIReason.MAP_SWEEP_REWARD); - mapSweepResponse.addDrop(dropBuilder); + }else if(sChallengeConfig.getSweepingOpenRule()[0]==2){ + MapMission copyMission = mapManager.getCopyMissionProgresById(sChallengeConfig.getMapId()); + if(copyMission.getTotalWeight()0){ + hasStore = MathUtils.randomFromWeight(sChallengeConfig.getSweepingStoreProbability()); + if(hasStore==1){ + StoreLogic.initOneStore(user,3); + mapSweepResponse.setCloudStore(hasStore); + } + } + } + SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(mapId); + for (int i = 0; i < count; i++) { + CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, sChallengeMapConfig.getSweepingAward(), 1, 0, BIReason.MAP_SWEEP_REWARD); + mapSweepResponse.addDrop(dropBuilder); + } + user.getUserMissionManager().onGameEvent(user, GameEvent.STORY_FIGHT, mapId,1,count); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), mapSweepResponse.build(), true); } @@ -1539,7 +1563,7 @@ public class MapLogic { * @param iSession * @param msgId */ - public void getAllLeveDifficultyInfos(ISession iSession, int msgId) throws Exception { + public void getAllLevelDifficultyInfos(ISession iSession, int msgId) throws Exception { int uid = iSession.getUid(); User user = UserManager.getUser(uid); LevelDifficultyManager levelDifficultyManager = user.getLevelDifficultyManager(); 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 84f0b5e4b..7ad7ced86 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 @@ -5,6 +5,7 @@ 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.HeroManager; import com.ljsd.jieling.logic.dao.TeamPosForPokenInfo; import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.root.User; @@ -56,8 +57,9 @@ public class MapMissionManager { typeByEventTypeMap.put(EventType.passMap,missionTypes); } - public static int updateMapMission(MapManager mapManager, int eventType, int eventId, int bossIdOrItemId){ - LOGGER.info("the eventtype ={},eventId={},bossItemId={}",eventType,eventId,bossIdOrItemId); + public static int updateMapMission(User user, int eventType, int eventId, int time){ + LOGGER.info("the eventtype ={},eventId={},bossItemId={}",eventType,eventId,time); + MapManager mapManager = user.getMapManager(); int mapId = mapManager.getCurMapId(); if(mapId==0){ return 0; @@ -100,6 +102,8 @@ public class MapMissionManager { continue; } boolean isNeedReset = false; + + for(SAccomplishmentConfig sAccomplishmentConfig : sAccomplishmentConfigs){ int missionId = sAccomplishmentConfig.getId(); Integer missionValue = allMissionProgress.get(missionId); @@ -108,6 +112,106 @@ public class MapMissionManager { } int score = sAccomplishmentConfig.getScore(); int[][] values = sAccomplishmentConfig.getValues(); + //逻辑类型14 + if(mapMissionType==MapMissionType.KILL_BOSS_IN_BOSS_EVENT){ + boolean tempResult = true; + if(sChallengeConfig.getDifficultType()==sAccomplishmentConfig.getValues()[0][0]&&eventId==sAccomplishmentConfig.getValues()[0][1]){ + + HeroManager heroManager = user.getHeroManager(); + Map scHeroMap = SCHero.getsCHero(); + for(Map.Entry entry:mapManager.getHeroAllAttributeMap().entrySet()){ + SCHero scHero = scHeroMap.get(heroManager.getHero(entry.getKey().toString()).getTemplateId()); + if(scHero.getProfession()==sAccomplishmentConfig.getValues()[1][0]){ + tempResult = false; + break; + } + } + } + if(tempResult){ + allMissionProgress.put(missionId,-1); + } + } + //逻辑类型15 + if(mapMissionType==mapMissionType.KILL_BOSS_INTIME_DIFFICULT_EVENT){ + boolean tempResult = false; + if(sChallengeConfig.getDifficultType()==sAccomplishmentConfig.getValues()[0][0]&&eventId==sAccomplishmentConfig.getValues()[0][1]){ + if(time value = (Map)entry.getValue(); + if(value.get(6)!=0){ + alive++; + } + } + if(alive>=sAccomplishmentConfig.getValues()[1][0]){ + tempResult = true; + } + } + if(tempResult){ + allMissionProgress.put(missionId,-1); + } + + } + //逻辑类型19 + if(mapMissionType==mapMissionType.KILL_MONSTER_BY_ORDER_DIFFICULT_MAP_EVENT){ + if(sChallengeConfig.getDifficultType()!=sAccomplishmentConfig.getValues()[1][0]){ + continue; + } + int[] value = sAccomplishmentConfig.getValues()[0]; + for(int i = 0 ; i < value.length ; i++){ + if(eventId!=value[i]) { + continue; + } + if(i==0&&missionValue==0){ + missionValue = value[i]; + }else if(i!=0&&missionValue==value[i-1]){ + if(i!=value.length-1){ + missionValue = value[i]; + }else{ + missionValue = -1; + } + }else{ + missionValue = 0; + } + } + allMissionProgress.put(missionId,missionValue); + } + //逻辑类型18 + if(mapMissionType==mapMissionType.FINISH_EVENT_BY_ORDER_DIFFICULT_MAP_EVENT){ + int[][] configValues = sAccomplishmentConfig.getValues(); + if(sChallengeConfig.getDifficultType()!=configValues[configValues.length-1][0]){ + continue; + } + for(int i = 0 ; i mapMissionTypes = typeByEventTypeMap.get(EventType.passMap); boolean needUpdate = false; Set takeCopyMisionRewards = mapManager.getTakeCopyMisionRewards(); + int addScore = 0; for(MapMissionType mapMissionType : mapMissionTypes){ List sAccomplishmentConfigs = SAccomplishmentConfig.getsAccomplishmentConfigByMapIdAndLogic(mapId, mapMissionType.getMissionTypeValue()); if(sAccomplishmentConfigs == null){ @@ -218,6 +323,7 @@ public class MapMissionManager { MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(missionId,MissionState.FINISH,missionValue+1); readySendCopyMission(missionStateChangeInfo); needUpdate =true; + addScore+=sAccomplishmentConfig.getScore(); } }else if(mapMissionType == MapMissionType.PASS_INTIME_MAP || mapMissionType == MapMissionType.PASS_TEAM_FORCE_EVENT || mapMissionType == MapMissionType.PASS_DEATH_MAP_EVENT ){ if(parm randomAEvents = MathUtils.randomForOneArray(behaviorTypeValues[1], randomANums); List randomBEvents = MathUtils.randomForOneArray(behaviorTypeValues[2], randomBNums); randomBEvents.addAll(randomAEvents); - List randomABPosList = MathUtils.randomForOneArray(behaviorTypeValues[3], randomBNums); + List randomABPosList = MathUtils.randomForOneArray(behaviorTypeValues[3], randomBNums+randomANums); for(Integer pos : randomABPosList){ eventUpdateResponse.addAddMapInfo(CommonProto.Cell.newBuilder() .setCellId(pos) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/GetAllLeveDifficultyInfostHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/GetAllLeveDifficultyInfostHandler.java index f99bc4a72..ae0819604 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/GetAllLeveDifficultyInfostHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/GetAllLeveDifficultyInfostHandler.java @@ -17,6 +17,6 @@ public class GetAllLeveDifficultyInfostHandler extends BaseHandler { @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - MapLogic.getInstance().getAllLeveDifficultyInfos(iSession,MessageTypeProto.MessageType.GET_ALL_LEVE_DIFFICULTT_RESPONSE_VALUE); + MapLogic.getInstance().getAllLevelDifficultyInfos(iSession,MessageTypeProto.MessageType.GET_ALL_LEVE_DIFFICULTT_RESPONSE_VALUE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CheckFight.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CheckFight.java index 6a2026fd4..9fdc1af3b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CheckFight.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CheckFight.java @@ -100,7 +100,7 @@ public class CheckFight { * @param seed * @param fightData * @param optionData - * @return {战斗结果,单位1剩余血量,单位2剩余血量,单位3剩余血量,单位4剩余血量,单位5剩余血量} + * @return {战斗结果,战斗时间,单位1剩余血量,单位2剩余血量,单位3剩余血量,单位4剩余血量,单位5剩余血量} */ public synchronized int[] checkFight(int seed,int maxTime, LuaValue fightData, LuaValue optionData){ LuaValue func = transCoderObj.get(LuaValue.valueOf("Execute")); @@ -109,12 +109,14 @@ public class CheckFight { args.set("maxTime",maxTime); LuaValue result = func.call( args,fightData,optionData); int status = result.get("result").toint(); - int[] resultCache = new int[6]; + int duration = result.get("duration").toint(); + int[] resultCache = new int[7]; resultCache[0]=status; + resultCache[1]=duration; LOGGER.info(" lua check test fight result : "+ status); for (int i = 1; i <= result.length(); i++) { - resultCache[i] = result.rawget(i).toint(); - LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i]); + resultCache[i+1] = result.rawget(i).toint(); + LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i+1]); } return resultCache; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index c58c23dc1..bad2825cf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -160,7 +160,8 @@ public class MissionLoigc { } SAccomplishmentConfig sAccomplishmentConfig = SAccomplishmentConfig.getsAccomplishmentConfigByIdMap(missionId); int mapId = sAccomplishmentConfig.getMapId(); - Map allMissionProgress = user.getMapManager().getCopyMissionProgresById(mapId).getAllMissionProgress(); + MapMission copyMission = user.getMapManager().getCopyMissionProgresById(mapId); + Map allMissionProgress = copyMission.getAllMissionProgress(); int finsihProgress = SAccomplishmentConfig.getsAccomplishmentConfigByIdMap(missionId).getValues()[1][0]; if(!allMissionProgress.containsKey(missionId) || (allMissionProgress.get(missionId)!=-1&&allMissionProgress.get(missionId)