From 73d07c875478bdc120f6812958cc765f9bd93b8e Mon Sep 17 00:00:00 2001 From: lvxinran Date: Tue, 17 Dec 2019 09:54:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=BF=85=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/GetPlayerInfoHandler.java | 1 + .../jieling/logic/dao/UserMissionManager.java | 47 +++++++++++++++++-- .../jieling/logic/mission/MissionLoigc.java | 6 ++- .../mission/main/MissingRoomMissionType.java | 8 +++- .../src/main/java/config/SMazeTreasure.java | 9 ++++ 5 files changed, 64 insertions(+), 7 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index a4a814286..e70222660 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -164,6 +164,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ .addAllPlayedMapTypes(mapManager.getPlayedMapType()) .setAmount(rechargeInfo.getSaveAmt()) .setVipDaily(playerInfoManager.getHadTakeDailyBoxVip()) + .setMissingRefreshCount(user.getUserMissionManager().getMissingRoomMissionType().getCoinRefreshCount()) .build(); try { MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index aea4bbf4d..c0fe3f806 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -23,6 +23,8 @@ import manager.STableManager; import util.TimeUtils; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class UserMissionManager extends MongoBase { @@ -158,17 +160,30 @@ public class UserMissionManager extends MongoBase { updateString("bloodyMissionIdsType",bloodyMissionIdsType); break; case MISSING_ROOM_REFRESH: + Map mustAppear = new HashMap<>(); if((int)parm[0]==1){ + //删除已经领取奖励的 + missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1); + missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-1); boolean result; SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1); result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); if(!result){ result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); if(!result){ + int coinRefreshCount = missingRoomMissionType.getCoinRefreshCount(); + int[][] refreshHighTypeNum = SMazeTreasureSetting.sMazeTreasureSettingMap.get(1).getRefreshHighTypeNum(); + for(int[] refresh:refreshHighTypeNum){ + if(coinRefreshCount==0||coinRefreshCount%refresh[0]!=0){ + continue; + }else{ + mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1)); + } + } int[][] cost = sMazeTreasureSetting.getCost(); - int count = (int)MathUtils.calABX(missingRoomMissionType.getCoinRefreshCount(), cost[1]); + int count = (int)MathUtils.calABX(coinRefreshCount, cost[1]); result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); - + missingRoomMissionType.setCoinRefreshCount(coinRefreshCount +1); } } if(!result){ @@ -176,17 +191,39 @@ public class UserMissionManager extends MongoBase { } missingRoomMissionType.getDoingMissionIds().clear(); } - int[][] missingRoomMission = new int[SMazeTreasure.sMazeTreasureMap.size()][]; + List mustMissions = new ArrayList<>(); + if(!mustAppear.isEmpty()){ + for(Map.Entry entry:mustAppear.entrySet()){ + List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); + List mustList = new ArrayList<>(); + for(SMazeTreasure maze :sMazeTreasures){ + if(mustMissions.contains(maze.getId())){ + continue; + } + int[] refreshWeight = new int[2]; + refreshWeight[0] = maze.getId(); + refreshWeight[1] = maze.getTaskRefreshProbability(); + mustList.add(refreshWeight); + } + int[][] mustArray = mustList.toArray(new int[mustList.size()][]); + int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue()); + Arrays.stream(missions).forEach(mission->mustMissions.add(mission)); + } + } + List missingRoomMission = new ArrayList<>(); for(Map.Entry entry:SMazeTreasure.sMazeTreasureMap.entrySet()){ int[] refreshWeight = new int[2]; refreshWeight[0] = entry.getKey(); refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); - missingRoomMission[entry.getKey()-1] =refreshWeight; + missingRoomMission.add(refreshWeight); } - int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission, 6); + int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission.toArray(new int[missingRoomMission.size()][]), 6-mustMissions.size()); for(int mission:missions){ missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); } + for(int mission:mustMissions){ + missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); + } updateString("missingRoomMissionType",missingRoomMissionType); break; } 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 6751d3d20..0490a8073 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 @@ -298,9 +298,13 @@ public class MissionLoigc { for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){ CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); int missingTime = missingRoomMissionType.getMissingTime(missionId); + List heroesInfo = missingRoomMissionType.getHerosInfo(missionId); info.setMissionId(missionId).setState(missingTime>0?0:missingTime==0?1:2) .setType(GameMisionType.MISSINGROOMMISSION.getType()) - .setProgress(missingTime).addAllHeroId(missingRoomMissionType.getHerosInfo(missionId)); + .setProgress(missingTime); + if(heroesInfo!=null&&!heroesInfo.isEmpty()){ + info.addAllHeroId(heroesInfo); + } missionList.add(info.build()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java index 79ac62294..b650b7b0a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java @@ -21,8 +21,11 @@ import java.util.*; */ public class MissingRoomMissionType extends AbstractMissionType{ private Map missingTime = new HashMap<>(); + private Map> heroesInfo = new HashMap<>(); + private int missionIndex; + private int coinRefreshCount; @Override @@ -36,7 +39,7 @@ public class MissingRoomMissionType extends AbstractMissionType{ @Override public int[][] reward(int missionId) { - + heroesInfo.remove(missionId); int realId = missionId % 10000; return SMazeTreasure.sMazeTreasureMap.get(realId).getReward(); } @@ -126,6 +129,9 @@ public class MissingRoomMissionType extends AbstractMissionType{ heroesInfo.put(missionId,heroes); } + public Map getAllMissingTime(){ + return missingTime; + } public int getMissingTime(int missionId) { return missingTime.get(missionId); } diff --git a/tablemanager/src/main/java/config/SMazeTreasure.java b/tablemanager/src/main/java/config/SMazeTreasure.java index 344fa3ab5..66fa22397 100644 --- a/tablemanager/src/main/java/config/SMazeTreasure.java +++ b/tablemanager/src/main/java/config/SMazeTreasure.java @@ -3,6 +3,9 @@ package config; import manager.STableManager; import manager.Table; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; @@ -28,10 +31,16 @@ public class SMazeTreasure implements BaseConfig { private int needCard; public static Map sMazeTreasureMap; + + public static Map> mazeMapByTaskType; @Override public void init() throws Exception { sMazeTreasureMap = STableManager.getConfig(SMazeTreasure.class); + mazeMapByTaskType = new HashMap<>(); + for (Map.Entry entry:sMazeTreasureMap.entrySet()){ + mazeMapByTaskType.computeIfAbsent(entry.getValue().getTaskType(),v->new ArrayList<>()).add(entry.getValue()); + } }